@@ -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" ,
0 commit comments