Skip to content

Commit f6ad8f2

Browse files
Fix conflict between type_alias_statement and primary_expression
1 parent ee427e4 commit f6ad8f2

6 files changed

Lines changed: 58521 additions & 56193 deletions

File tree

grammar.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)