Skip to content

Commit ed68dae

Browse files
committed
add let_declaration
1 parent c31a72a commit ed68dae

File tree

4 files changed

+101
-88
lines changed

4 files changed

+101
-88
lines changed

grammar.js

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,14 @@ module.exports = grammar({
102102
[$.primary_expression, $.parameter, $._pattern],
103103
[$.parameter, $._pattern],
104104
[$.parameter, $.parenthesized_pattern],
105+
[$.parameter, $.tuple_item_pattern],
105106
[$.variant_declaration],
106107
[$.unit, $._function_type_parameter_list],
107108
[$.functor_parameter, $.module_primary_expression, $.module_identifier_path],
108109
[$._reserved_identifier, $.function],
109110
[$.polyvar_type],
110-
[$._let_binding, $.or_pattern],
111-
[$.exception_pattern, $.or_pattern]
111+
[$.let_binding, $.or_pattern],
112+
[$.exception_pattern, $.or_pattern],
112113
],
113114

114115
rules: {
@@ -479,24 +480,24 @@ module.exports = grammar({
479480

480481
let_binding: $ => seq(
481482
field('pattern', $._pattern),
482-
// optional($.type_annotation),
483-
optional(seq(
484-
'=',
485-
repeat($.decorator),
486-
field('body', $.expression),
487-
// optional(alias($._let_binding_and, $.let_binding)),
488-
)),
483+
choice(
484+
seq(
485+
$.type_annotation,
486+
optional(
487+
seq('=',
488+
repeat($.decorator),
489+
field('body', $.expression)
490+
)
491+
)
492+
),
493+
seq(
494+
'=',
495+
repeat($.decorator),
496+
field('body', $.expression),
497+
)
498+
)
489499
),
490500

491-
// _let_binding_and: $ => seq(
492-
// // New line here not necessary terminates the statement,
493-
// // show this doubt to the parser
494-
// repeat($._newline),
495-
// repeat($.decorator),
496-
// 'and',
497-
// $._let_binding,
498-
// ),
499-
500501
expression_statement: $ => $.expression,
501502

502503
expression: $ => choice(
@@ -811,7 +812,7 @@ module.exports = grammar({
811812
parameter: $ => seq(
812813
optional($.uncurry),
813814
choice(
814-
$._pattern,
815+
seq($._pattern, optional($.type_annotation)),
815816
$.labeled_parameter,
816817
$.unit,
817818
$.abstract_type
@@ -856,7 +857,7 @@ module.exports = grammar({
856857
$.range_pattern,
857858
$.exception_pattern
858859
),
859-
optional($.type_annotation),
860+
// optional($.type_annotation),
860861
optional($.as_aliasing),
861862
)),
862863

@@ -929,14 +930,15 @@ module.exports = grammar({
929930
'}'
930931
),
931932

933+
tuple_item_pattern: $ => seq(
934+
repeat($.decorator),
935+
$._pattern,
936+
optional($.type_annotation),
937+
),
938+
932939
tuple_pattern: $ => seq(
933940
'(',
934-
commaSep2t(
935-
alias(
936-
seq(repeat($.decorator), $._pattern),
937-
$.tuple_item_pattern
938-
)
939-
),
941+
commaSep2t($.tuple_item_pattern),
940942
')',
941943
),
942944

test/corpus/expressions.txt

Lines changed: 67 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,8 @@ switch foo {
428428
(switch_match
429429
(value_identifier)
430430
(sequence_expression
431-
(let_binding (value_identifier) (string (string_fragment)))
431+
(let_declaration
432+
(let_binding (value_identifier) (string (string_fragment))))
432433
(expression_statement
433434
(binary_expression
434435
(value_identifier)
@@ -455,8 +456,8 @@ switch foo {
455456
(variant_identifier)
456457
(formal_parameters
457458
(value_identifier)
458-
(as_aliasing (value_identifier)
459-
(type_annotation (type_identifier)))
459+
(as_aliasing (value_identifier))
460+
(type_annotation (type_identifier))
460461
(record_pattern
461462
(value_identifier)
462463
(value_identifier))))
@@ -495,8 +496,8 @@ switch foo {
495496
(polyvar_identifier)
496497
(formal_parameters
497498
(value_identifier)
498-
(as_aliasing (value_identifier)
499-
(type_annotation (type_identifier)))
499+
(as_aliasing (value_identifier))
500+
(type_annotation (type_identifier))
500501
(number)))
501502
(as_aliasing (value_identifier))
502503
(sequence_expression (expression_statement (number))))
@@ -1147,43 +1148,48 @@ module Test = %graphql(`
11471148
(expression_statement
11481149
(extension_expression
11491150
(extension_identifier)
1150-
(let_binding
1151-
(value_identifier)
1152-
(function
1153-
parameters: (formal_parameters
1154-
(parameter (value_identifier))
1155-
(parameter (value_identifier)))
1156-
body: (binary_expression
1157-
left: (value_identifier)
1158-
right: (value_identifier))))))
1151+
(let_declaration
1152+
(let_binding
1153+
pattern: (value_identifier)
1154+
body: (function
1155+
parameters: (formal_parameters
1156+
(parameter (value_identifier))
1157+
(parameter (value_identifier)))
1158+
body: (binary_expression
1159+
left: (value_identifier)
1160+
right: (value_identifier)))))))
11591161
(expression_statement
11601162
(extension_expression
11611163
(extension_identifier)
1162-
(let_binding
1163-
(value_identifier)
1164-
(string
1165-
(string_fragment)))
1166-
(let_binding
1167-
(value_identifier)
1168-
(number))))
1169-
(let_binding
1170-
(value_identifier)
1171-
(extension_expression
1172-
(extension_identifier)
1173-
(expression_statement
1174-
(template_string
1175-
(template_string_content
1176-
(escape_sequence)
1177-
(escape_sequence))))))
1178-
(let_binding
1179-
(value_identifier)
1180-
(extension_expression
1181-
(extension_identifier)
1182-
(expression_statement
1183-
(template_string
1184-
(template_string_content
1185-
(escape_sequence)
1186-
(escape_sequence))))))
1164+
(let_declaration
1165+
(let_binding
1166+
pattern: (value_identifier)
1167+
body: (string
1168+
(string_fragment))))
1169+
(let_declaration
1170+
(let_binding
1171+
pattern: (value_identifier)
1172+
body: (number)))))
1173+
(let_declaration
1174+
(let_binding
1175+
pattern: (value_identifier)
1176+
body: (extension_expression
1177+
(extension_identifier)
1178+
(expression_statement
1179+
(template_string
1180+
(template_string_content
1181+
(escape_sequence)
1182+
(escape_sequence)))))))
1183+
(let_declaration
1184+
(let_binding
1185+
pattern: (value_identifier)
1186+
body: (extension_expression
1187+
(extension_identifier)
1188+
(expression_statement
1189+
(template_string
1190+
(template_string_content
1191+
(escape_sequence)
1192+
(escape_sequence)))))))
11871193
(module_declaration
11881194
name: (module_identifier)
11891195
definition: (extension_expression
@@ -1239,11 +1245,12 @@ let f = () => assert false
12391245
(binary_expression
12401246
(number)
12411247
(number))))))
1242-
(let_binding
1243-
(value_identifier)
1244-
(function
1245-
(formal_parameters)
1246-
(assert_expression (false)))))
1248+
(let_declaration
1249+
(let_binding
1250+
(value_identifier)
1251+
(function
1252+
(formal_parameters)
1253+
(assert_expression (false))))))
12471254

12481255
============================================
12491256
Try-catch
@@ -1425,21 +1432,22 @@ let f = ({name, _} as foo: T.t) => {}
14251432
---
14261433

14271434
(source_file
1428-
(let_binding
1429-
(value_identifier)
1430-
(function
1431-
parameters: (formal_parameters
1432-
(parameter
1433-
(record_pattern
1434-
(value_identifier)
1435-
(value_identifier))
1436-
(as_aliasing
1437-
(value_identifier)
1438-
(type_annotation
1439-
(type_identifier_path
1440-
(module_identifier)
1441-
(type_identifier))))))
1442-
body: (block))))
1435+
(let_declaration
1436+
(let_binding
1437+
pattern: (value_identifier)
1438+
body: (function
1439+
parameters: (formal_parameters
1440+
(parameter
1441+
(record_pattern
1442+
(value_identifier)
1443+
(value_identifier))
1444+
(as_aliasing
1445+
(value_identifier))
1446+
(type_annotation
1447+
(type_identifier_path
1448+
(module_identifier)
1449+
(type_identifier)))))
1450+
body: (block)))))
14431451

14441452
===========================================
14451453
Lazy Expression

test/corpus/functions.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ Parameter aliasing
146146
(parameter
147147
(labeled_parameter
148148
(value_identifier)
149-
(as_aliasing (value_identifier)
150-
(type_annotation (type_identifier)))
149+
(as_aliasing (value_identifier))
150+
(type_annotation (type_identifier))
151151
(number))))
152152
(number)))
153153

test/corpus/modules.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ include module type of {
4949
(arguments
5050
(block
5151
(type_declaration (type_identifier))
52-
(let_binding (value_identifier) (type_annotation (type_identifier)))))))
52+
(let_declaration
53+
(let_binding
54+
(value_identifier)
55+
(type_annotation (type_identifier))))))))
5356
(include_statement
5457
(module_type_of
5558
(module_identifier_path (module_identifier) (module_identifier))))

0 commit comments

Comments
 (0)