Skip to content

Commit 3ed303b

Browse files
authored
🐛 Make clause guard field/tuple access recursive (#138)
1 parent 0c0c63a commit 3ed303b

5 files changed

Lines changed: 39853 additions & 39388 deletions

File tree

grammar.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ module.exports = grammar({
1717
$._maybe_tuple_expression,
1818
$.remote_constructor_name,
1919
],
20+
[
21+
$._maybe_case_clause_guard_accessor_expression,
22+
$.constant_field_access,
23+
$.remote_constructor_name,
24+
],
2025
[$.case_subjects],
2126
[$.source_file],
2227
[$._constant_value, $._case_clause_guard_unit],
@@ -505,12 +510,34 @@ module.exports = grammar({
505510
_case_clause_guard_unit: ($) =>
506511
choice(
507512
$.identifier,
513+
// _constant_value can partially cover these, so bump their precedence
508514
prec(1, alias($._case_clause_tuple_access, $.tuple_access)),
515+
prec(1, alias($._case_clause_field_access, $.field_access)),
509516
seq("{", $._case_clause_guard_expression, "}"),
510517
$._constant_value
511518
),
519+
_maybe_case_clause_guard_accessor_expression: ($) =>
520+
choice(
521+
$.identifier,
522+
alias($._case_clause_tuple_access, $.tuple_access),
523+
alias($._case_clause_field_access, $.field_access)
524+
),
512525
_case_clause_tuple_access: ($) =>
513-
seq(field("tuple", $.identifier), ".", field("index", $.integer)),
526+
prec.left(
527+
seq(
528+
field("tuple", $._maybe_case_clause_guard_accessor_expression),
529+
".",
530+
field("index", $.integer)
531+
)
532+
),
533+
_case_clause_field_access: ($) =>
534+
prec.left(
535+
seq(
536+
field("record", $._maybe_case_clause_guard_accessor_expression),
537+
".",
538+
field("field", $.label)
539+
)
540+
),
514541
let_assert: ($) =>
515542
seq(
516543
"let",

src/grammar.json

Lines changed: 92 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/node-types.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)