rego_parse_error: unexpected identifier token: expected \n or ; or }
This error is raised when the Rego parser encounters an unexpected identifier token.
An identifier token represents a name assigned to variables, rules, and references in the policy. In parsing, the identifier tokens are different from other tokens like keywords.
This error is typically caused by misplaced whitespace or by poorly formatted code.
Stage | Category | Message |
---|---|---|
parsing | rego_parse_error | unexpected identifier token: expected \n or ; or } |
Examples
A simple example of a policy that contains this error follows, note the missing
.
between input
and roles
:
package policy
import rego.v1
allow if {
"admin" in input roles
}
The code above will raise the following error, helpfully showing the location in question:
1 error occurred: policy.rego:6: rego_parse_error: unexpected identifier token: expected \n or ; or }
"admin" in input roles
^
Another case when this error can occur is when a statement has been added to the
end of another on the same line, this happens a lot when copying and pasting. In
the example below, the endswith
email check is meant to be on the next line:
package policy
import rego.v1
allow if {
"admin" in input.roles endswith(input.email, "@example.com")
}
This should be written like this, with the statements on separate lines:
package policy
import rego.v1
allow if {
"admin" in input.roles
endswith(input.email, "@example.com")
}
How To Fix It
While the fix for this error depends on other elements on the line of Rego in question, the error message will always point to the location of the error to get you started.
Typically, the way to resolve this to find and correct misplaced whitespace using the location in the error message.
This can be tricky in larger files and often happens when moving code between files. We recommend migrating functions and rules incrementally to reduce the risk of this happening.
Community
For questions, discussions and announcements related to OPA, or Styra products, services and open source projects, please join the Styra Community on Slack.