@@ -106,35 +106,40 @@ repository:
106106 - include : ' #array-binding-pattern'
107107 - name : variable.other.readwrite.ts
108108 match : ([_$[:alpha:]][_$[:alnum:]]*)
109- - name : variable.other.readwrite.ts
110- match : ([_$[:alpha:]][_$[:alnum:]]*)
111- - name : meta.delimiter.object.comma.ts
112- match : ' ,'
109+ - include : ' #object-binding-pattern'
110+ - include : ' #destructuring-variable-rest'
111+ - include : ' #punctuation-comma'
113112
114113 array-binding-element :
115114 patterns :
116115 - include : ' #comment'
117116 - include : ' #object-binding-pattern'
118117 - include : ' #array-binding-pattern'
119- - name : variable.other.readwrite.ts
120- match : ([_$[:alpha:]][_$[:alnum:]]*)
121- - name : meta.delimiter.object.comma.ts
122- match : ' ,'
118+ - include : ' #destructuring-variable-rest'
119+ - include : ' #punctuation-comma'
120+
121+ destructuring-variable-rest :
122+ match : (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
123+ captures :
124+ ' 1 ' : { name: keyword.operator.rest.ts }
125+ ' 2 ' : { name: variable.other.readwrite.ts }
123126
124127 object-binding-pattern :
125- begin : \{
128+ begin : (?:(\.\.\.)\s*)?(\{)
126129 beginCaptures :
127- ' 0 ' : { name: punctuation.definition.binding-pattern.object.ts }
130+ ' 1 ' : { name: keyword.operator.rest.ts }
131+ ' 2 ' : { name: punctuation.definition.binding-pattern.object.ts }
128132 end : \}
129133 endCaptures :
130134 ' 0 ' : { name: punctuation.definition.binding-pattern.object.ts }
131135 patterns :
132136 - include : ' #object-binding-element'
133137
134138 array-binding-pattern :
135- begin : \[
139+ begin : (?:(\.\.\.)\s*)?(\[)
136140 beginCaptures :
137- ' 0 ' : { name: punctuation.definition.binding-pattern.array.ts }
141+ ' 1 ' : { name: keyword.operator.rest.ts }
142+ ' 2 ' : { name: punctuation.definition.binding-pattern.array.ts }
138143 end : \]
139144 endCaptures :
140145 ' 0 ' : { name: punctuation.definition.binding-pattern.array.ts }
@@ -173,8 +178,7 @@ repository:
173178 - include : ' #ternary-expression'
174179 - include : ' #new-expr'
175180 - include : ' #object-literal'
176- - include : ' #expression-operator'
177- - include : ' #operators'
181+ - include : ' #expression-operators'
178182 - include : ' #support-objects'
179183 - include : ' #function-call'
180184 - include : ' #identifiers'
@@ -371,8 +375,7 @@ repository:
371375 ' 4 ' : { name: keyword.control.as.ts }
372376 ' 5 ' : { name: invalid.illegal.ts }
373377 ' 6 ' : { name: variable.other.readwrite.alias.ts }
374- - name : meta.delimiter.object.comma.ts
375- match : ' ,'
378+ - include : ' #punctuation-comma'
376379 - name : constant.language.import-export-all.ts
377380 match : \*
378381 - name : keyword.control.default.ts
@@ -460,6 +463,12 @@ repository:
460463 - include : ' #method-declaration'
461464 - include : ' #indexer-declaration'
462465 - include : ' #type-annotation'
466+ - begin : \.\.\.
467+ beginCaptures :
468+ ' 0 ' : { name: keyword.operator.spread.ts }
469+ end : ' (?=\}|;|,|$)|(?<=\})'
470+ patterns :
471+ - include : ' #type'
463472 - include : ' #punctuation-comma'
464473 - include : ' #punctuation-semicolon'
465474
@@ -612,7 +621,7 @@ repository:
612621 match : ' (?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)'
613622 captures :
614623 ' 1 ' : { name: storage.modifier.ts }
615- ' 2 ' : { name: keyword.operator.spread .ts }
624+ ' 2 ' : { name: keyword.operator.rest .ts }
616625 ' 3 ' : { name: variable.parameter.ts }
617626 ' 4 ' : { name: keyword.operator.optional.ts }
618627
@@ -650,35 +659,40 @@ repository:
650659 - include : ' #parameter-array-binding-pattern'
651660 - name : variable.parameter.ts
652661 match : ([_$[:alpha:]][_$[:alnum:]]*)
653- - name : variable.parameter.ts
654- match : ([_$[:alpha:]][_$[:alnum:]]*)
655- - name : meta.delimiter.object.comma.ts
656- match : ' ,'
662+ - include : ' #parameter-object-binding-pattern'
663+ - include : ' #destructuring-parameter-rest'
664+ - include : ' #punctuation-comma'
657665
658666 parameter-array-binding-element :
659667 patterns :
660668 - include : ' #comment'
661669 - include : ' #parameter-object-binding-pattern'
662670 - include : ' #parameter-array-binding-pattern'
663- - name : variable.parameter.ts
664- match : ([_$[:alpha:]][_$[:alnum:]]*)
665- - name : meta.delimiter.object.comma.ts
666- match : ' ,'
671+ - include : ' #destructuring-parameter-rest'
672+ - include : ' #punctuation-comma'
673+
674+ destructuring-parameter-rest :
675+ match : (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
676+ captures :
677+ ' 1 ' : { name: keyword.operator.rest.ts }
678+ ' 2 ' : { name: variable.parameter.ts }
667679
668680 parameter-object-binding-pattern :
669- begin : \{
681+ begin : (?:(\.\.\.)\s*)?(\{)
670682 beginCaptures :
671- ' 0 ' : { name: punctuation.definition.binding-pattern.object.ts }
683+ ' 1 ' : { name: keyword.operator.rest.ts }
684+ ' 2 ' : { name: punctuation.definition.binding-pattern.object.ts }
672685 end : \}
673686 endCaptures :
674687 ' 0 ' : { name: punctuation.definition.binding-pattern.object.ts }
675688 patterns :
676689 - include : ' #parameter-object-binding-element'
677690
678691 parameter-array-binding-pattern :
679- begin : \[
692+ begin : (?:(\.\.\.)\s*)?(\[)
680693 beginCaptures :
681- ' 0 ' : { name: punctuation.definition.binding-pattern.array.ts }
694+ ' 1 ' : { name: keyword.operator.rest.ts }
695+ ' 2 ' : { name: punctuation.definition.binding-pattern.array.ts }
682696 end : \]
683697 endCaptures :
684698 ' 0 ' : { name: punctuation.definition.binding-pattern.array.ts }
@@ -728,11 +742,10 @@ repository:
728742 - include : ' #numeric-literal'
729743 - include : ' #type-primitive'
730744 - include : ' #type-builtin-literals'
731- - include : ' #typeof-operator'
732745 - include : ' #type-parameters'
733746 - include : ' #type-tuple'
734747 - include : ' #type-object'
735- - include : ' #type-operator '
748+ - include : ' #type-operators '
736749 - include : ' #type-fn-type-parameters'
737750 - include : ' #type-paren-or-function-parameters'
738751 - include : ' #type-function-return-type'
@@ -819,9 +832,11 @@ repository:
819832 patterns :
820833 - include : ' #function-parameters'
821834
822- type-operator :
823- name : keyword.operator.type.ts
824- match : ' [&|]'
835+ type-operators :
836+ patterns :
837+ - include : ' #typeof-operator'
838+ - name : keyword.operator.type.ts
839+ match : ' [&|]'
825840
826841 type-function-return-type :
827842 name : meta.type.function.return.ts
@@ -1342,13 +1357,20 @@ repository:
13421357 end : (?=,|\})
13431358 patterns :
13441359 - include : ' #expression'
1360+ - name : meta.object.member.ts
1361+ begin : \.\.\.
1362+ beginCaptures :
1363+ ' 0 ' : { name: keyword.operator.spread.ts }
1364+ end : (?=,|\})
1365+ patterns :
1366+ - include : ' #expression'
13451367 - name : meta.object.member.ts
13461368 match : ([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\}|$)
13471369 captures :
13481370 ' 1 ' : { name: variable.other.readwrite.ts }
13491371 - include : ' #punctuation-comma'
13501372
1351- expression-operator :
1373+ expression-operators :
13521374 patterns :
13531375 - name : keyword.control.flow.ts
13541376 match : (?<!\.|\$)\b(await)\b(?!\$)
@@ -1371,13 +1393,8 @@ repository:
13711393 end : (?=$|[;,})\]])
13721394 patterns :
13731395 - include : ' #type'
1374-
1375- typeof-operator :
1376- name : keyword.operator.typeof.ts
1377- match : (?<!\.|\$)\btypeof\b(?!\$)
1378-
1379- operators :
1380- patterns :
1396+ - name : keyword.operator.spread.ts
1397+ match : \.\.\.
13811398 - name : keyword.operator.assignment.compound.ts
13821399 match : \*=|(?<!\()/=|%=|\+=|\-=
13831400 - name : keyword.operator.assignment.compound.bitwise.ts
@@ -1399,6 +1416,10 @@ repository:
13991416 - name : keyword.operator.arithmetic.ts
14001417 match : ' %|\*|/|-|\+'
14011418
1419+ typeof-operator :
1420+ name : keyword.operator.typeof.ts
1421+ match : (?<!\.|\$)\btypeof\b(?!\$)
1422+
14021423 arrow-function :
14031424 patterns :
14041425 - name : meta.arrow.ts
0 commit comments