@@ -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 (
0 commit comments