diff --git a/TypeScript.YAML-tmLanguage b/TypeScript.YAML-tmLanguage
index 534bb8ba..43de9f83 100644
--- a/TypeScript.YAML-tmLanguage
+++ b/TypeScript.YAML-tmLanguage
@@ -106,25 +106,29 @@ repository:
- include: '#array-binding-pattern'
- name: variable.other.readwrite.ts
match: ([_$[:alpha:]][_$[:alnum:]]*)
- - name: variable.other.readwrite.ts
- match: ([_$[:alpha:]][_$[:alnum:]]*)
- - name: meta.delimiter.object.comma.ts
- match: ','
+ - include: '#object-binding-pattern'
+ - include: '#destructuring-variable-rest'
+ - include: '#punctuation-comma'
array-binding-element:
patterns:
- include: '#comment'
- include: '#object-binding-pattern'
- include: '#array-binding-pattern'
- - name: variable.other.readwrite.ts
- match: ([_$[:alpha:]][_$[:alnum:]]*)
- - name: meta.delimiter.object.comma.ts
- match: ','
+ - include: '#destructuring-variable-rest'
+ - include: '#punctuation-comma'
+
+ destructuring-variable-rest:
+ match: (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
+ captures:
+ '1': { name: keyword.operator.rest.ts }
+ '2': { name: variable.other.readwrite.ts }
object-binding-pattern:
- begin: \{
+ begin: (?:(\.\.\.)\s*)?(\{)
beginCaptures:
- '0': { name: punctuation.definition.binding-pattern.object.ts }
+ '1': { name: keyword.operator.rest.ts }
+ '2': { name: punctuation.definition.binding-pattern.object.ts }
end: \}
endCaptures:
'0': { name: punctuation.definition.binding-pattern.object.ts }
@@ -132,9 +136,10 @@ repository:
- include: '#object-binding-element'
array-binding-pattern:
- begin: \[
+ begin: (?:(\.\.\.)\s*)?(\[)
beginCaptures:
- '0': { name: punctuation.definition.binding-pattern.array.ts }
+ '1': { name: keyword.operator.rest.ts }
+ '2': { name: punctuation.definition.binding-pattern.array.ts }
end: \]
endCaptures:
'0': { name: punctuation.definition.binding-pattern.array.ts }
@@ -173,8 +178,7 @@ repository:
- include: '#ternary-expression'
- include: '#new-expr'
- include: '#object-literal'
- - include: '#expression-operator'
- - include: '#operators'
+ - include: '#expression-operators'
- include: '#support-objects'
- include: '#function-call'
- include: '#identifiers'
@@ -371,8 +375,7 @@ repository:
'4': { name: keyword.control.as.ts }
'5': { name: invalid.illegal.ts }
'6': { name: variable.other.readwrite.alias.ts }
- - name: meta.delimiter.object.comma.ts
- match: ','
+ - include: '#punctuation-comma'
- name: constant.language.import-export-all.ts
match: \*
- name: keyword.control.default.ts
@@ -460,6 +463,12 @@ repository:
- include: '#method-declaration'
- include: '#indexer-declaration'
- include: '#type-annotation'
+ - begin: \.\.\.
+ beginCaptures:
+ '0': { name: keyword.operator.spread.ts }
+ end: '(?=\}|;|,|$)|(?<=\})'
+ patterns:
+ - include: '#type'
- include: '#punctuation-comma'
- include: '#punctuation-semicolon'
@@ -612,7 +621,7 @@ repository:
match: '(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?
- name
- variable.other.readwrite.ts
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ include
+ #object-binding-pattern
- name
- meta.delimiter.object.comma.ts
- match
- ,
+ include
+ #destructuring-variable-rest
+
+
+ include
+ #punctuation-comma
@@ -367,27 +367,46 @@
include
#array-binding-pattern
+
+ include
+ #destructuring-variable-rest
+
+
+ include
+ #punctuation-comma
+
+
+
+ destructuring-variable-rest
+
+ match
+ (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
+ captures
+
+ 1
name
- variable.other.readwrite.ts
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ keyword.operator.rest.ts
+ 2
name
- meta.delimiter.object.comma.ts
- match
- ,
+ variable.other.readwrite.ts
-
+
object-binding-pattern
begin
- \{
+ (?:(\.\.\.)\s*)?(\{)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.ts
+
+ 2
name
punctuation.definition.binding-pattern.object.ts
@@ -414,10 +433,15 @@
array-binding-pattern
begin
- \[
+ (?:(\.\.\.)\s*)?(\[)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.ts
+
+ 2
name
punctuation.definition.binding-pattern.array.ts
@@ -545,11 +569,7 @@
include
- #expression-operator
-
-
- include
- #operators
+ #expression-operators
include
@@ -1202,10 +1222,8 @@
- name
- meta.delimiter.object.comma.ts
- match
- ,
+ include
+ #punctuation-comma
name
@@ -1503,6 +1521,27 @@
include
#type-annotation
+
+ begin
+ \.\.\.
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.spread.ts
+
+
+ end
+ (?=\}|;|,|$)|(?<=\})
+ patterns
+
+
+ include
+ #type
+
+
+
include
#punctuation-comma
@@ -2000,7 +2039,7 @@
2
name
- keyword.operator.spread.ts
+ keyword.operator.rest.ts
3
@@ -2127,16 +2166,16 @@
- name
- variable.parameter.ts
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ include
+ #parameter-object-binding-pattern
- name
- meta.delimiter.object.comma.ts
- match
- ,
+ include
+ #destructuring-parameter-rest
+
+
+ include
+ #punctuation-comma
@@ -2156,27 +2195,46 @@
include
#parameter-array-binding-pattern
+
+ include
+ #destructuring-parameter-rest
+
+
+ include
+ #punctuation-comma
+
+
+
+ destructuring-parameter-rest
+
+ match
+ (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
+ captures
+
+ 1
name
- variable.parameter.ts
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ keyword.operator.rest.ts
+ 2
name
- meta.delimiter.object.comma.ts
- match
- ,
+ variable.parameter.ts
-
+
parameter-object-binding-pattern
begin
- \{
+ (?:(\.\.\.)\s*)?(\{)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.ts
+
+ 2
name
punctuation.definition.binding-pattern.object.ts
@@ -2203,10 +2261,15 @@
parameter-array-binding-pattern
begin
- \[
+ (?:(\.\.\.)\s*)?(\[)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.ts
+
+ 2
name
punctuation.definition.binding-pattern.array.ts
@@ -2354,10 +2417,6 @@
include
#type-builtin-literals
-
- include
- #typeof-operator
-
include
#type-parameters
@@ -2372,7 +2431,7 @@
include
- #type-operator
+ #type-operators
include
@@ -2573,12 +2632,21 @@
- type-operator
+ type-operators
- name
- keyword.operator.type.ts
- match
- [&|]
+ patterns
+
+
+ include
+ #typeof-operator
+
+
+ name
+ keyword.operator.type.ts
+ match
+ [&|]
+
+
type-function-return-type
@@ -3740,6 +3808,29 @@
+
+ name
+ meta.object.member.ts
+ begin
+ \.\.\.
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.spread.ts
+
+
+ end
+ (?=,|\})
+ patterns
+
+
+ include
+ #expression
+
+
+
name
meta.object.member.ts
@@ -3760,7 +3851,7 @@
- expression-operator
+ expression-operators
patterns
@@ -3831,19 +3922,12 @@
-
-
- typeof-operator
-
- name
- keyword.operator.typeof.ts
- match
- (?<!\.|\$)\btypeof\b(?!\$)
-
- operators
-
- patterns
-
+
+ name
+ keyword.operator.spread.ts
+ match
+ \.\.\.
+
name
keyword.operator.assignment.compound.ts
@@ -3906,6 +3990,13 @@
+ typeof-operator
+
+ name
+ keyword.operator.typeof.ts
+ match
+ (?<!\.|\$)\btypeof\b(?!\$)
+
arrow-function
patterns
diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage
index 516eff4f..c3d9aaac 100644
--- a/TypeScriptReact.tmLanguage
+++ b/TypeScriptReact.tmLanguage
@@ -338,16 +338,16 @@
- name
- variable.other.readwrite.tsx
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ include
+ #object-binding-pattern
- name
- meta.delimiter.object.comma.tsx
- match
- ,
+ include
+ #destructuring-variable-rest
+
+
+ include
+ #punctuation-comma
@@ -367,27 +367,46 @@
include
#array-binding-pattern
+
+ include
+ #destructuring-variable-rest
+
+
+ include
+ #punctuation-comma
+
+
+
+ destructuring-variable-rest
+
+ match
+ (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
+ captures
+
+ 1
name
- variable.other.readwrite.tsx
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ keyword.operator.rest.tsx
+ 2
name
- meta.delimiter.object.comma.tsx
- match
- ,
+ variable.other.readwrite.tsx
-
+
object-binding-pattern
begin
- \{
+ (?:(\.\.\.)\s*)?(\{)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.tsx
+
+ 2
name
punctuation.definition.binding-pattern.object.tsx
@@ -414,10 +433,15 @@
array-binding-pattern
begin
- \[
+ (?:(\.\.\.)\s*)?(\[)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.tsx
+
+ 2
name
punctuation.definition.binding-pattern.array.tsx
@@ -549,11 +573,7 @@
include
- #expression-operator
-
-
- include
- #operators
+ #expression-operators
include
@@ -1206,10 +1226,8 @@
- name
- meta.delimiter.object.comma.tsx
- match
- ,
+ include
+ #punctuation-comma
name
@@ -1507,6 +1525,27 @@
include
#type-annotation
+
+ begin
+ \.\.\.
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.spread.tsx
+
+
+ end
+ (?=\}|;|,|$)|(?<=\})
+ patterns
+
+
+ include
+ #type
+
+
+
include
#punctuation-comma
@@ -2004,7 +2043,7 @@
2
name
- keyword.operator.spread.tsx
+ keyword.operator.rest.tsx
3
@@ -2131,16 +2170,16 @@
- name
- variable.parameter.tsx
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ include
+ #parameter-object-binding-pattern
- name
- meta.delimiter.object.comma.tsx
- match
- ,
+ include
+ #destructuring-parameter-rest
+
+
+ include
+ #punctuation-comma
@@ -2160,27 +2199,46 @@
include
#parameter-array-binding-pattern
+
+ include
+ #destructuring-parameter-rest
+
+
+ include
+ #punctuation-comma
+
+
+
+ destructuring-parameter-rest
+
+ match
+ (?:(\.\.\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)
+ captures
+
+ 1
name
- variable.parameter.tsx
- match
- ([_$[:alpha:]][_$[:alnum:]]*)
+ keyword.operator.rest.tsx
+ 2
name
- meta.delimiter.object.comma.tsx
- match
- ,
+ variable.parameter.tsx
-
+
parameter-object-binding-pattern
begin
- \{
+ (?:(\.\.\.)\s*)?(\{)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.tsx
+
+ 2
name
punctuation.definition.binding-pattern.object.tsx
@@ -2207,10 +2265,15 @@
parameter-array-binding-pattern
begin
- \[
+ (?:(\.\.\.)\s*)?(\[)
beginCaptures
- 0
+ 1
+
+ name
+ keyword.operator.rest.tsx
+
+ 2
name
punctuation.definition.binding-pattern.array.tsx
@@ -2358,10 +2421,6 @@
include
#type-builtin-literals
-
- include
- #typeof-operator
-
include
#type-parameters
@@ -2376,7 +2435,7 @@
include
- #type-operator
+ #type-operators
include
@@ -2577,12 +2636,21 @@
- type-operator
+ type-operators
- name
- keyword.operator.type.tsx
- match
- [&|]
+ patterns
+
+
+ include
+ #typeof-operator
+
+
+ name
+ keyword.operator.type.tsx
+ match
+ [&|]
+
+
type-function-return-type
@@ -3722,6 +3790,29 @@
+
+ name
+ meta.object.member.tsx
+ begin
+ \.\.\.
+ beginCaptures
+
+ 0
+
+ name
+ keyword.operator.spread.tsx
+
+
+ end
+ (?=,|\})
+ patterns
+
+
+ include
+ #expression
+
+
+
name
meta.object.member.tsx
@@ -3742,7 +3833,7 @@
- expression-operator
+ expression-operators
patterns
@@ -3813,19 +3904,12 @@
-
-
- typeof-operator
-
- name
- keyword.operator.typeof.tsx
- match
- (?<!\.|\$)\btypeof\b(?!\$)
-
- operators
-
- patterns
-
+
+ name
+ keyword.operator.spread.tsx
+ match
+ \.\.\.
+
name
keyword.operator.assignment.compound.tsx
@@ -3888,6 +3972,13 @@
+ typeof-operator
+
+ name
+ keyword.operator.typeof.tsx
+ match
+ (?<!\.|\$)\btypeof\b(?!\$)
+
arrow-function
patterns
diff --git a/tests/baselines/Issue143.baseline.txt b/tests/baselines/Issue143.baseline.txt
index c5d67d05..4bdbbf16 100644
--- a/tests/baselines/Issue143.baseline.txt
+++ b/tests/baselines/Issue143.baseline.txt
@@ -31,13 +31,13 @@ Grammar: TypeScript.tmLanguage
^^^^^^^^^
source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts
^
- source.ts meta.import.ts meta.block.ts meta.delimiter.object.comma.ts
+ source.ts meta.import.ts meta.block.ts punctuation.separator.comma.ts
^
source.ts meta.import.ts meta.block.ts
^^^^^^^^^^^^
source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts
^
- source.ts meta.import.ts meta.block.ts meta.delimiter.object.comma.ts
+ source.ts meta.import.ts meta.block.ts punctuation.separator.comma.ts
^
source.ts meta.import.ts meta.block.ts
^^^^^^^^^
diff --git a/tests/baselines/Issue153.baseline.txt b/tests/baselines/Issue153.baseline.txt
index 0fad4fa3..eccb70af 100644
--- a/tests/baselines/Issue153.baseline.txt
+++ b/tests/baselines/Issue153.baseline.txt
@@ -71,7 +71,7 @@ Grammar: TypeScript.tmLanguage
^^^^^^^
source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts
^
- source.ts meta.import.ts meta.block.ts meta.delimiter.object.comma.ts
+ source.ts meta.import.ts meta.block.ts punctuation.separator.comma.ts
^
source.ts meta.import.ts meta.block.ts
^^^^^^
diff --git a/tests/baselines/Issue219.baseline.txt b/tests/baselines/Issue219.baseline.txt
index 177e6dbe..60adc98d 100644
--- a/tests/baselines/Issue219.baseline.txt
+++ b/tests/baselines/Issue219.baseline.txt
@@ -25,7 +25,7 @@ Grammar: TypeScript.tmLanguage
^^^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^^^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
> coordinate
diff --git a/tests/baselines/Issue232.baseline.txt b/tests/baselines/Issue232.baseline.txt
index 3e82771b..d6beb602 100644
--- a/tests/baselines/Issue232.baseline.txt
+++ b/tests/baselines/Issue232.baseline.txt
@@ -23,7 +23,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts variable.other.readwrite.ts
^
- source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
^^^^^^^^^
diff --git a/tests/baselines/TsxSamples.baseline.txt b/tests/baselines/TsxSamples.baseline.txt
index c4ee8ecc..61a3c6b7 100644
--- a/tests/baselines/TsxSamples.baseline.txt
+++ b/tests/baselines/TsxSamples.baseline.txt
@@ -572,14 +572,10 @@ Grammar: TypeScriptReact.tmLanguage
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx
^
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.section.embedded.begin.tsx
- ^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
- ^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
- ^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
+ ^^^
+ source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx keyword.operator.spread.tsx
^^^^^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx variable.other.property.tsx
+ source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx variable.other.readwrite.tsx
^
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.section.embedded.end.tsx
^
@@ -645,14 +641,10 @@ Grammar: TypeScriptReact.tmLanguage
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx
^
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.section.embedded.begin.tsx
- ^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
- ^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
- ^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
+ ^^^
+ source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx keyword.operator.spread.tsx
^^^^^
- source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx variable.other.property.tsx
+ source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx variable.other.readwrite.tsx
^
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.section.embedded.end.tsx
^
diff --git a/tests/baselines/TsxSamples.txt b/tests/baselines/TsxSamples.txt
index ad4ebea7..4a3f4224 100644
--- a/tests/baselines/TsxSamples.txt
+++ b/tests/baselines/TsxSamples.txt
@@ -194,8 +194,8 @@ Grammar: TypeScriptReact.tmLanguage
[42, 17]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx
^^^^^^^^^
[42, 18]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx entity.name.tag.tsx
- ^
- [42, 29]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
+ ^^^
+ [42, 29]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx keyword.operator.spread.tsx
^^
[42, 39]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx punctuation.definition.tag.end.tsx
>
@@ -205,8 +205,8 @@ Grammar: TypeScriptReact.tmLanguage
[45, 18]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx
^^^^^^^^^
[45, 19]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx entity.name.tag.tsx
- ^
- [45, 30]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx punctuation.accessor.tsx
+ ^^^
+ [45, 30]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx meta.embedded.expression.tsx keyword.operator.spread.tsx
^^
[45, 57]: source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.tag.tsx punctuation.definition.tag.end.tsx
>
diff --git a/tests/baselines/exportDeclarations.baseline.txt b/tests/baselines/exportDeclarations.baseline.txt
index 1a32be98..cee82f08 100644
--- a/tests/baselines/exportDeclarations.baseline.txt
+++ b/tests/baselines/exportDeclarations.baseline.txt
@@ -27,7 +27,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.export.ts meta.block.ts variable.other.readwrite.alias.ts
^
- source.ts meta.export.ts meta.block.ts meta.delimiter.object.comma.ts
+ source.ts meta.export.ts meta.block.ts punctuation.separator.comma.ts
^
source.ts meta.export.ts meta.block.ts
^
@@ -83,7 +83,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.export.ts meta.block.ts variable.other.readwrite.alias.ts
^
- source.ts meta.export.ts meta.block.ts meta.delimiter.object.comma.ts
+ source.ts meta.export.ts meta.block.ts punctuation.separator.comma.ts
^
source.ts meta.export.ts meta.block.ts
^
diff --git a/tests/baselines/parameterBindingPattern.baseline.txt b/tests/baselines/parameterBindingPattern.baseline.txt
index abb2636e..d6d843bd 100644
--- a/tests/baselines/parameterBindingPattern.baseline.txt
+++ b/tests/baselines/parameterBindingPattern.baseline.txt
@@ -293,7 +293,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts variable.parameter.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -317,7 +317,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -331,7 +331,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts variable.parameter.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -347,7 +347,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.definition.binding-pattern.array.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -401,7 +401,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts variable.parameter.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -425,7 +425,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -439,7 +439,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts variable.parameter.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -455,7 +455,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.definition.binding-pattern.array.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.parameter.object-binding-pattern.ts
^
@@ -770,7 +770,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts
^^^^^
@@ -820,7 +820,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts meta.delimiter.object.comma.ts
+ source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts punctuation.separator.comma.ts
^
source.ts meta.function.ts meta.parameters.ts meta.paramter.array-binding-pattern.ts
^^^^^
diff --git a/tests/baselines/restAndSpreadExpression.baseline.txt b/tests/baselines/restAndSpreadExpression.baseline.txt
new file mode 100644
index 00000000..c3aa7723
--- /dev/null
+++ b/tests/baselines/restAndSpreadExpression.baseline.txt
@@ -0,0 +1,714 @@
+original file
+-----------------------------------
+function foo(...rest) {
+}
+// rest
+let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
+[a, b, ...rest] = [1, 2, 3, 4, 5];
+var { x, ...{ y, z } } = o;
+const [x, ...[y, z]] = ['a', 'b', 'c'];
+// spread
+let n = { x, y, ...z };
+function f(t: T, u: U): { id: string, ...T, ...U } {
+ return { id: 'id', ...t, ...u };
+}
+function myFunction(v, w, x, y, z) { }
+var args = [0, 1];
+myFunction(-1, ...args, 2, ...[3]);
+var parts = ['shoulders', 'knees'];
+var lyrics = ['head', ...parts, 'and', 'toes'];
+-----------------------------------
+
+Grammar: TypeScript.tmLanguage
+-----------------------------------
+>function foo(...rest) {
+ ^^^^^^^^
+ source.ts meta.function.ts storage.type.function.ts
+ ^
+ source.ts meta.function.ts
+ ^^^
+ source.ts meta.function.ts entity.name.function.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
+ ^^^
+ source.ts meta.function.ts meta.parameters.ts keyword.operator.rest.ts
+ ^^^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
+ ^
+ source.ts meta.function.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+ ^^
+ source.ts meta.function.ts meta.block.ts
+>}
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+ ^^
+ source.ts
+>// rest
+ ^^
+ source.ts comment.line.double-slash.ts punctuation.definition.comment.ts
+ ^^^^^^
+ source.ts comment.line.double-slash.ts
+>let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
+ ^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^^^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts keyword.operator.rest.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.object-literal.ts punctuation.definition.block.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>[a, b, ...rest] = [1, 2, 3, 4, 5];
+ ^
+ source.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.array.literal.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.array.literal.ts
+ ^
+ source.ts meta.array.literal.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.array.literal.ts
+ ^^^
+ source.ts meta.array.literal.ts keyword.operator.spread.ts
+ ^^^^
+ source.ts meta.array.literal.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts
+ ^
+ source.ts keyword.operator.assignment.ts
+ ^
+ source.ts
+ ^
+ source.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.array.literal.ts
+ ^
+ source.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.array.literal.ts
+ ^
+ source.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.array.literal.ts
+ ^
+ source.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.array.literal.ts
+ ^
+ source.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>var { x, ...{ y, z } } = o;
+ ^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^^^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts keyword.operator.rest.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>const [x, ...[y, z]] = ['a', 'b', 'c'];
+ ^^^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.definition.binding-pattern.array.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
+ ^^^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts keyword.operator.rest.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.definition.binding-pattern.array.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.definition.binding-pattern.array.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.definition.binding-pattern.array.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>// spread
+ ^^
+ source.ts comment.line.double-slash.ts punctuation.definition.comment.ts
+ ^^^^^^^^
+ source.ts comment.line.double-slash.ts
+>let n = { x, y, ...z };
+ ^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts
+ ^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts keyword.operator.spread.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts punctuation.definition.block.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>function f(t: T, u: U): { id: string, ...T, ...U } {
+ ^^^^^^^^
+ source.ts meta.function.ts storage.type.function.ts
+ ^
+ source.ts meta.function.ts
+ ^
+ source.ts meta.function.ts entity.name.function.ts
+ ^
+ source.ts meta.function.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
+ ^
+ source.ts meta.function.ts meta.type.parameters.ts entity.name.type.ts
+ ^
+ source.ts meta.function.ts meta.type.parameters.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.type.parameters.ts
+ ^
+ source.ts meta.function.ts meta.type.parameters.ts entity.name.type.ts
+ ^
+ source.ts meta.function.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts meta.field.declaration.ts
+ ^^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts meta.field.declaration.ts variable.object.property.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts
+ ^^^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts keyword.operator.spread.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts entity.name.type.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts
+ ^^^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts keyword.operator.spread.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts entity.name.type.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts meta.object.type.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.function.ts meta.return.type.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+ ^^
+ source.ts meta.function.ts meta.block.ts
+> return { id: 'id', ...t, ...u };
+ ^^^^
+ source.ts meta.function.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.block.ts keyword.control.flow.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts
+ ^^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts string.quoted.single.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts
+ ^^^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts keyword.operator.spread.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts
+ ^^^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts keyword.operator.spread.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts meta.object.member.ts
+ ^
+ source.ts meta.function.ts meta.block.ts meta.object-literal.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts meta.function.ts meta.block.ts
+>}
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+ ^^
+ source.ts
+>function myFunction(v, w, x, y, z) { }
+ ^^^^^^^^
+ source.ts meta.function.ts storage.type.function.ts
+ ^
+ source.ts meta.function.ts
+ ^^^^^^^^^^
+ source.ts meta.function.ts entity.name.function.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
+ ^
+ source.ts meta.function.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.function.ts meta.block.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+ ^^
+ source.ts
+>var args = [0, 1];
+ ^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts
+ ^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>myFunction(-1, ...args, 2, ...[3]);
+ ^^^^^^^^^^
+ source.ts entity.name.function.ts
+ ^
+ source.ts meta.brace.round.ts
+ ^
+ source.ts keyword.operator.arithmetic.ts
+ ^
+ source.ts constant.numeric.decimal.ts
+ ^
+ source.ts punctuation.separator.comma.ts
+ ^
+ source.ts
+ ^^^
+ source.ts keyword.operator.spread.ts
+ ^^^^
+ source.ts variable.other.readwrite.ts
+ ^
+ source.ts punctuation.separator.comma.ts
+ ^
+ source.ts
+ ^
+ source.ts constant.numeric.decimal.ts
+ ^
+ source.ts punctuation.separator.comma.ts
+ ^
+ source.ts
+ ^^^
+ source.ts keyword.operator.spread.ts
+ ^
+ source.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.array.literal.ts constant.numeric.decimal.ts
+ ^
+ source.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.brace.round.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>var parts = ['shoulders', 'knees'];
+ ^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts
+ ^^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^^^^^^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+ ^^
+ source.ts
+>var lyrics = ['head', ...parts, 'and', 'toes'];
+ ^^^
+ source.ts meta.var.expr.ts storage.type.ts
+ ^
+ source.ts meta.var.expr.ts
+ ^^^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts
+ ^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts keyword.operator.spread.ts
+ ^^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.begin.ts
+ ^^^^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts string.quoted.single.ts punctuation.definition.string.end.ts
+ ^
+ source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.array.literal.ts meta.brace.square.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
\ No newline at end of file
diff --git a/tests/baselines/variableBindingPattern.baseline.txt b/tests/baselines/variableBindingPattern.baseline.txt
index 7db69370..20904639 100644
--- a/tests/baselines/variableBindingPattern.baseline.txt
+++ b/tests/baselines/variableBindingPattern.baseline.txt
@@ -285,7 +285,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -309,7 +309,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -323,7 +323,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -339,7 +339,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.array.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -380,7 +380,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -404,7 +404,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -418,7 +418,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts variable.other.readwrite.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -434,7 +434,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.definition.binding-pattern.array.ts
^
- source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.object-binding-pattern-variable.ts
^
@@ -736,7 +736,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
^^^^^
@@ -773,7 +773,7 @@ Grammar: TypeScript.tmLanguage
^
source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.definition.binding-pattern.object.ts
^
- source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts meta.delimiter.object.comma.ts
+ source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts punctuation.separator.comma.ts
^
source.ts meta.var.expr.ts meta.array-binding-pattern-variable.ts
^^^^^
diff --git a/tests/cases/restAndSpreadExpression.ts b/tests/cases/restAndSpreadExpression.ts
new file mode 100644
index 00000000..520c99e3
--- /dev/null
+++ b/tests/cases/restAndSpreadExpression.ts
@@ -0,0 +1,17 @@
+function foo(...rest) {
+}
+// rest
+let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
+[a, b, ...rest] = [1, 2, 3, 4, 5];
+var { x, ...{ y, z } } = o;
+const [x, ...[y, z]] = ['a', 'b', 'c'];
+// spread
+let n = { x, y, ...z };
+function f(t: T, u: U): { id: string, ...T, ...U } {
+ return { id: 'id', ...t, ...u };
+}
+function myFunction(v, w, x, y, z) { }
+var args = [0, 1];
+myFunction(-1, ...args, 2, ...[3]);
+var parts = ['shoulders', 'knees'];
+var lyrics = ['head', ...parts, 'and', 'toes'];
\ No newline at end of file