This method has always struck me as unnecessarily complex. This PR tries to simplify it by observing that most of the cases can only occur on the first iteration of the loop. On the first iteration, we might have an access on a name (foo.bar), variable (principal.bar), string-literal ("foo".bar) or expression ((principal.foo).bar), but on all subsequent iterations we can only have the expression case. The string literal case was identical to the expression case, so these can share code.
Issue #, if available
Checklist for requesting a review
The change in this PR is (choose one, and delete the other options):
[ ] A breaking change requiring a major version bump to cedar-policy (e.g., changes to the signature of an existing API).
[ ] A backwards-compatible change requiring a minor version bump to cedar-policy (e.g., addition of a new API).
[ ] A bug fix or other functionality change requiring a patch to cedar-policy.
[x] A change "invisible" to users (e.g., documentation, changes to "internal" crates like cedar-policy-core, cedar-validator, etc.)
[ ] A change (breaking or otherwise) that only impacts unreleased or experimental code.
I confirm that this PR (choose one, and delete the other options):
[ ] Updates the "Unreleased" section of the CHANGELOG with a description of my change (required for major/minor version bumps).
[x] Does not update the CHANGELOG because my change does not significantly impact released code.
I confirm that cedar-spec (choose one, and delete the other options):
[ ] Does not require updates because my change does not impact the Cedar formal model or DRT infrastructure.
[ ] Requires updates, and I have made / will make these updates myself. (Please include in your description a timeline or link to the relevant PR in cedar-spec, and how you have tested that your updates are correct.)
[ ] Requires updates, but I do not plan to make them in the near future. (Make sure that your changes are hidden behind a feature flag to mark them as experimental.)
[ ] I'm not sure how my change impacts cedar-spec. (Post your PR anyways, and we'll discuss in the comments.)
[x] Does not require updates because my change does not impact the Cedar language specification.
[ ] Requires updates, and I have made / will make these updates myself. (Please include in your description a timeline or link to the relevant PR in cedar-docs. PRs should be targeted at a staging-X.Y branch, not main.)
[ ] I'm not sure how my change impacts the documentation. (Post your PR anyways, and we'll discuss in the comments.)
Description of changes
This method has always struck me as unnecessarily complex. This PR tries to simplify it by observing that most of the cases can only occur on the first iteration of the loop. On the first iteration, we might have an access on a name (
foo.bar
), variable (principal.bar
), string-literal ("foo".bar
) or expression ((principal.foo).bar
), but on all subsequent iterations we can only have the expression case. The string literal case was identical to the expression case, so these can share code.Issue #, if available
Checklist for requesting a review
The change in this PR is (choose one, and delete the other options):
cedar-policy
(e.g., changes to the signature of an existing API).cedar-policy
(e.g., addition of a new API).cedar-policy
.cedar-policy-core
,cedar-validator
, etc.)I confirm that this PR (choose one, and delete the other options):
I confirm that
cedar-spec
(choose one, and delete the other options):cedar-spec
, and how you have tested that your updates are correct.)cedar-spec
. (Post your PR anyways, and we'll discuss in the comments.)I confirm that
docs.cedarpolicy.com
(choose one, and delete the other options):cedar-docs
. PRs should be targeted at astaging-X.Y
branch, notmain
.)