@@ -74,6 +74,7 @@ module.exports = grammar({
7474 [ $ . _contextual_keywords , $ . type_parameter_constraint ] ,
7575
7676 [ $ . _type , $ . array_creation_expression ] ,
77+ [ $ . _type , $ . attribute ] ,
7778 [ $ . _type , $ . stack_alloc_array_creation_expression ] ,
7879 [ $ . _type , $ . _nullable_base_type ] ,
7980 [ $ . _type , $ . _nullable_base_type , $ . array_creation_expression ] ,
@@ -258,6 +259,7 @@ module.exports = grammar({
258259 'protected' ,
259260 'public' ,
260261 'readonly' ,
262+ 'required' ,
261263 prec ( 1 , 'ref' ) , //make sure that 'ref' is treated as a modifier for local variable declarations instead of as a ref expression
262264 'sealed' ,
263265 'static' ,
@@ -924,12 +926,22 @@ module.exports = grammar({
924926 $ . negated_pattern ,
925927 $ . parenthesized_pattern ,
926928 $ . relational_pattern ,
927- $ . binary_pattern ,
929+ $ . or_pattern ,
930+ $ . and_pattern ,
931+ $ . list_pattern ,
928932 $ . type_pattern
929933 ) ,
930934
931935 type_pattern : $ => $ . _type ,
932936
937+ list_pattern : $ => seq (
938+ '[' ,
939+ optional ( seq ( commaSep1 ( choice ( $ . _pattern , $ . slice_pattern ) ) , optional ( ',' ) ) ) ,
940+ ']'
941+ ) ,
942+
943+ slice_pattern : $ => '..' ,
944+
933945 parenthesized_pattern : $ => seq ( '(' , $ . _pattern , ')' ) ,
934946
935947 relational_pattern : $ => prec . left ( choice (
@@ -941,18 +953,17 @@ module.exports = grammar({
941953
942954 negated_pattern : $ => seq ( 'not' , $ . _pattern ) ,
943955
944- binary_pattern : $ => choice (
945- prec . left ( PREC . AND , seq (
946- field ( 'left' , $ . _pattern ) ,
947- field ( 'operator' , 'and' ) ,
948- field ( 'right' , $ . _pattern )
949- ) ) ,
950- prec . left ( PREC . OR , seq (
951- field ( 'left' , $ . _pattern ) ,
952- field ( 'operator' , 'or' ) ,
953- field ( 'right' , $ . _pattern )
954- ) ) ,
955- ) ,
956+ and_pattern : $ => prec . left ( PREC . AND , seq (
957+ field ( 'left' , $ . _pattern ) ,
958+ field ( 'operator' , 'and' ) ,
959+ field ( 'right' , $ . _pattern )
960+ ) ) ,
961+
962+ or_pattern : $ => prec . left ( PREC . OR , seq (
963+ field ( 'left' , $ . _pattern ) ,
964+ field ( 'operator' , 'or' ) ,
965+ field ( 'right' , $ . _pattern )
966+ ) ) ,
956967
957968 //We may need to expand this list if more things can be evaluated at compile time
958969 constant_pattern : $ => choice (
@@ -1634,7 +1645,7 @@ module.exports = grammar({
16341645 $ . _string_literal_fragment ,
16351646 $ . escape_sequence
16361647 ) ) ,
1637- '"'
1648+ choice ( '"' , '"U8' , '"u8' )
16381649 ) ,
16391650
16401651 _string_literal_fragment : $ => token . immediate ( prec ( 1 , / [ ^ " \\ \n ] + / ) ) ,
@@ -1645,7 +1656,7 @@ module.exports = grammar({
16451656 / [ ^ " ] / ,
16461657 '""' ,
16471658 ) ) ,
1648- '"'
1659+ choice ( '"' , '"U8' , '"u8' )
16491660 ) ) ,
16501661
16511662 // Comments
0 commit comments