@@ -53,7 +53,6 @@ module.exports = grammar({
5353 [ $ . with_item , $ . _collection_elements ] ,
5454 [ $ . named_expression , $ . as_pattern ] ,
5555 [ $ . print_statement , $ . primary_expression ] ,
56- [ $ . type_alias_statement , $ . primary_expression ] ,
5756 [ $ . match_statement , $ . primary_expression ] ,
5857 ] ,
5958
@@ -404,7 +403,7 @@ module.exports = grammar({
404403 optional ( 'async' ) ,
405404 'def' ,
406405 field ( 'name' , $ . identifier ) ,
407- field ( 'type_parameters' , optional ( $ . type_parameter ) ) ,
406+ field ( 'type_parameters' , optional ( $ . type_parameters ) ) ,
408407 field ( 'parameters' , $ . parameters ) ,
409408 optional (
410409 seq (
@@ -455,24 +454,31 @@ module.exports = grammar({
455454 ) ,
456455 ) ,
457456
458- type_alias_statement : $ => prec . dynamic ( 1 , seq (
457+ type_alias_statement : $ => seq (
459458 'type' ,
460- field ( 'left' , $ . type ) ,
459+ field ( 'left' , alias ( $ . _type_alias_left_hand_side , $ . type ) ) ,
461460 '=' ,
462461 field ( 'right' , $ . type ) ,
463- ) ) ,
462+ ) ,
463+
464+ _type_alias_left_hand_side : $ => seq (
465+ field ( 'type' , choice (
466+ $ . generic_type ,
467+ $ . identifier
468+ ) )
469+ ) ,
464470
465471 class_definition : $ => seq (
466472 'class' ,
467473 field ( 'name' , $ . identifier ) ,
468- field ( 'type_parameters' , optional ( $ . type_parameter ) ) ,
474+ field ( 'type_parameters' , optional ( $ . type_parameters ) ) ,
469475 field ( 'superclasses' , optional ( $ . argument_list ) ) ,
470476 ':' ,
471477 field ( 'body' , $ . _suite ) ,
472478 ) ,
473- type_parameter : $ => seq (
479+ type_parameters : $ => seq (
474480 '[' ,
475- commaSep1 ( $ . type ) ,
481+ commaSep1 ( field ( 'type_parameter' , $ . type ) ) ,
476482 optional ( ',' ) ,
477483 ']' ,
478484 ) ,
@@ -489,13 +495,13 @@ module.exports = grammar({
489495 argument_list : $ => seq (
490496 '(' ,
491497 optional ( commaSep1 (
492- choice (
498+ field ( 'argument' , choice (
493499 $ . expression ,
494500 $ . list_splat ,
495501 $ . dictionary_splat ,
496502 alias ( $ . parenthesized_list_splat , $ . parenthesized_expression ) ,
497503 $ . keyword_argument ,
498- ) ,
504+ ) ) ,
499505 ) ) ,
500506 optional ( ',' ) ,
501507 ')' ,
@@ -605,7 +611,7 @@ module.exports = grammar({
605611 field ( 'value' , $ . case_pattern ) ,
606612 ) ,
607613
608- keyword_pattern : $ => seq ( $ . identifier , '=' , $ . _simple_pattern ) ,
614+ keyword_pattern : $ => seq ( field ( 'name' , $ . identifier ) , '=' , $ . _simple_pattern ) ,
609615
610616 splat_pattern : $ => prec ( 1 , seq ( choice ( '*' , '**' ) , choice ( $ . identifier , '_' ) ) ) ,
611617
@@ -928,11 +934,11 @@ module.exports = grammar({
928934 ) ) ,
929935
930936 typed_parameter : $ => prec ( PREC . typed_parameter , seq (
931- choice (
937+ field ( 'name' , choice (
932938 $ . identifier ,
933939 $ . list_splat_pattern ,
934940 $ . dictionary_splat_pattern ,
935- ) ,
941+ ) ) ,
936942 ':' ,
937943 field ( 'type' , $ . type ) ,
938944 ) ) ,
@@ -951,7 +957,7 @@ module.exports = grammar({
951957 $ . identifier ,
952958 alias ( 'type' , $ . identifier ) ,
953959 ) ,
954- $ . type_parameter ,
960+ $ . type_parameters ,
955961 ) ) ,
956962 union_type : $ => prec . left ( seq ( $ . type , '|' , $ . type ) ) ,
957963 constrained_type : $ => prec . right ( seq ( $ . type , ':' , $ . type ) ) ,
0 commit comments