Skip to content

Expand keyword-in-ref coverage for complex parser edge cases (interpreter + RVM)#744

Open
Copilot wants to merge 5 commits into
mainfrom
copilot/add-keywords-in-refs-capability
Open

Expand keyword-in-ref coverage for complex parser edge cases (interpreter + RVM)#744
Copilot wants to merge 5 commits into
mainfrom
copilot/add-keywords-in-refs-capability

Conversation

Copilot AI commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

The existing keyword-in-ref tests covered common cases but missed several high-value parser edge paths. This update broadens coverage to ensure keyword field handling is exercised in complex and corner-case reference shapes across both execution paths.

  • Interpreter coverage: complex keyword ref scenarios

    • Extended /tests/interpreter/cases/refr/keywords_in_refs.yaml with cases for:
      • future-keyword fields used as ref segments without import future.keywords
      • keyword segments inside package paths
      • keyword segments inside import paths
      • keyword segments in rule-head reference paths
      • mixed dot-keyword access plus dynamic bracket indexing
  • RVM parity coverage

    • Added matching scenarios in /tests/rvm/rego/cases/chained_access.yaml so RVM exercises the same reference patterns and semantics as interpreter coverage.
  • Result-shape consistency

    • Normalized expected literal formatting in YAML where needed to avoid ambiguity in string-valued array expectations.
package test
import data.catalog.if.default as kw

segment := "import"
result := input.package[segment].value
x := data.words.if.default.value
y := kw.value

Copilot AI changed the title [WIP] Add keywords_in_refs capability to allow reserved keywords as field names parser: allow reserved keywords as field names in dot-notation refs (keywords_in_refs) Jun 9, 2026
Copilot AI requested a review from anakrish June 9, 2026 17:29
Copilot AI changed the title parser: allow reserved keywords as field names in dot-notation refs (keywords_in_refs) Expand keyword-in-ref coverage for complex parser edge cases (interpreter + RVM) Jun 9, 2026
@anakrish anakrish marked this pull request as ready for review June 11, 2026 22:24
@anakrish anakrish requested a review from Copilot June 11, 2026 22:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands keyword-in-reference parsing support in the core Rego parser so that reserved keywords (and imported future keywords) can be used as dot-notation field names (e.g. input.package.format, data.words.if.default.value) without being rejected as keywords. It then adds interpreter and RVM regression tests to exercise these edge-case reference shapes and ensure execution-path parity.

Changes:

  • Added Parser::parse_ref_field() to accept any TokenKind::Ident as a ref field segment after . (including keyword spellings).
  • Updated ref/path/rule-head parsing to use parse_ref_field() instead of parse_var() / parse_ident() for dot segments.
  • Added/extended YAML test coverage for keyword segments in refs (interpreter + RVM), including package/import paths and dynamic bracket indexing mixed with keyword dot access.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
src/parser.rs Allows keyword spellings as dot-notation ref field segments by introducing parse_ref_field() and wiring it into ref/path/rule-ref parsing.
tests/rvm/rego/cases/chained_access.yaml Adds RVM cases covering keyword segments in refs across package fields, package/import paths, rule-head refs, and mixed dot+dynamic bracket access.
tests/interpreter/cases/refr/keywords_in_refs.yaml Adds interpreter coverage for keywords-as-field-names in dot refs, including reserved keywords and selected complex edge shapes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add keywords_in_refs capability to allow reserved keywords as dot-notation field names

3 participants