Skip to content

Commit 857272e

Browse files
committed
Add separate named node for type spreads
1 parent e39df74 commit 857272e

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

grammar.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ module.exports = grammar({
109109
[$.type_binding, $._inline_type],
110110
[$._module_structure, $.parenthesized_module_expression],
111111
[$.record_type_field, $.object_type_field],
112+
[$._record_type_member, $._object_type_member],
112113
],
113114

114115
rules: {
@@ -382,40 +383,48 @@ module.exports = grammar({
382383

383384
record_type: $ => seq(
384385
'{',
385-
commaSept($.record_type_field),
386+
commaSept($._record_type_member),
386387
'}',
387388
),
388389

389-
record_type_field: $ => choice(
390-
seq('...', choice($.type_identifier, $.generic_type, $.type_identifier_path)),
390+
record_type_field: $ =>
391391
seq(
392392
optional('mutable'),
393393
alias($.value_identifier, $.property_identifier),
394394
optional('?'),
395395
$.type_annotation,
396396
),
397+
398+
type_spread: $ =>
399+
seq('...', choice($.type_identifier, $.generic_type, $.type_identifier_path)),
400+
401+
_record_type_member: $ => choice(
402+
$.record_type_field,
403+
$.type_spread
397404
),
398405

399406
object_type: $ => prec.left(seq(
400407
'{',
401408
choice(
402-
commaSep1t($._object_type_field),
403-
seq('.', commaSept($._object_type_field)),
404-
seq('..', commaSept($._object_type_field)),
409+
commaSep1t($._object_type_member),
410+
seq('.', commaSept($._object_type_member)),
411+
seq('..', commaSept($._object_type_member)),
405412
),
406413
'}',
407414
)),
408415

409-
_object_type_field: $ => alias($.object_type_field, $.field),
416+
_object_type_member: $ =>
417+
choice(
418+
alias($.object_type_field, $.field),
419+
$.type_spread
420+
),
410421

411422
object_type_field: $ => choice(
412-
seq('...', choice($.type_identifier, $.type_identifier_path)),
413423
seq(
414424
alias($.string, $.property_identifier),
415425
':',
416426
$._type,
417427
),
418-
419428
),
420429

421430
generic_type: $ => prec.left(seq(

test/corpus/type_declarations.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,21 @@ type t = {
168168
(type_binding
169169
(type_identifier)
170170
(record_type
171-
(record_type_field
171+
(type_spread
172172
(type_identifier))
173-
(record_type_field
173+
(type_spread
174174
(generic_type
175175
(type_identifier)
176176
(type_arguments
177177
(type_identifier))))
178-
(record_type_field
178+
(type_spread
179179
(generic_type
180180
(type_identifier_path
181181
(module_identifier)
182182
(type_identifier))
183183
(type_arguments
184184
(type_identifier))))
185-
(record_type_field
185+
(type_spread
186186
(type_identifier_path
187187
(module_identifier)
188188
(type_identifier)))
@@ -478,7 +478,7 @@ type t<'a> = {.."name": string} as 'a
478478
(property_identifier
479479
(string_fragment))
480480
(type_identifier))
481-
(field
481+
(type_spread
482482
(type_identifier)))))
483483
(type_declaration
484484
(type_binding

0 commit comments

Comments
 (0)