Skip to content

Commit 74789e0

Browse files
committed
Handle the arrows inside type arguments
Fixes #559
1 parent c29d12d commit 74789e0

File tree

5 files changed

+211
-8
lines changed

5 files changed

+211
-8
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ variables:
2222
typeParameters: (<\s*{{typeParamersStart}}([^=<>]|=[^<]|\<\s*{{typeParamersStart}}([^=<>]|=[^<])*\>)*>\s*)
2323
# Identifier start | matching braces | matching parenthesis | matching square brackets | matching strings
2424
typeArgumentsStart: ({{typeParamersStart}}|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))
25-
typeArgumentsInnerExpressionPart: '[^<>\(]|{{matchingParenthesis}}'
26-
typeArguments: (<\s*{{typeArgumentsStart}}({{typeArgumentsInnerExpressionPart}}|\<\s*{{typeArgumentsStart}}({{typeArgumentsInnerExpressionPart}})*\>)*>\s*)
25+
typeArgumentsInnerExpressionPart: '[^<>\(]|{{matchingParenthesis}}|(?<==)\>'
26+
typeArguments: (<\s*{{typeArgumentsStart}}({{typeArgumentsInnerExpressionPart}}|\<\s*{{typeArgumentsStart}}({{typeArgumentsInnerExpressionPart}})*(?!=)\>)*(?!=)>\s*)
2727
functionCallLookup: \s*(\?\.\s*)?{{typeArguments}}?\(
2828
arrowLookup: |-
2929
# sure shot arrow functions even if => is on new line

TypeScript.tmLanguage

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3272,9 +3272,9 @@
32723272
<key>function-call</key>
32733273
<dict>
32743274
<key>begin</key>
3275-
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\)))*\&gt;)*&gt;\s*)?\()</string>
3275+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;\s*)?\()</string>
32763276
<key>end</key>
3277-
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\)))*\&gt;)*&gt;\s*)?\()</string>
3277+
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;\s*)?\()</string>
32783278
<key>patterns</key>
32793279
<array>
32803280
<dict>
@@ -3283,7 +3283,7 @@
32833283
<key>begin</key>
32843284
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
32853285
<key>end</key>
3286-
<string>(?=\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\)))*\&gt;)*&gt;\s*)?\()</string>
3286+
<string>(?=\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;\s*)?\()</string>
32873287
<key>patterns</key>
32883288
<array>
32893289
<dict>

TypeScriptReact.tmLanguage

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3276,9 +3276,9 @@
32763276
<key>function-call</key>
32773277
<dict>
32783278
<key>begin</key>
3279-
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\)))*\&gt;)*&gt;\s*)?\()</string>
3279+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;\s*)?\()</string>
32803280
<key>end</key>
3281-
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\)))*\&gt;)*&gt;\s*)?\()</string>
3281+
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;\s*)?\()</string>
32823282
<key>patterns</key>
32833283
<array>
32843284
<dict>
@@ -3287,7 +3287,7 @@
32873287
<key>begin</key>
32883288
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\??\.\s*)*|(\??\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
32893289
<key>end</key>
3290-
<string>(?=\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\)))*\&gt;)*&gt;\s*)?\()</string>
3290+
<string>(?=\s*(\?\.\s*)?(&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;|\&lt;\s*(([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))|(\'[^\']*\')|(\"[^\"]*\")|(\`[^\`]*\`))([^&lt;&gt;\(]|(\([^\(\)]*\))|(?&lt;==)\&gt;)*(?!=)\&gt;)*(?!=)&gt;\s*)?\()</string>
32913291
<key>patterns</key>
32923292
<array>
32933293
<dict>

tests/baselines/Issue559.baseline.txt

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
original file
2+
-----------------------------------
3+
let myFunc = function<T,U>(txt:string,num:number){}
4+
5+
class MyClass {
6+
myProp = myFunc<number, () => void>("syntax highlight is incorrect", 1);
7+
}
8+
9+
let myProp = myFunc<number, () => void>("syntax highlight is correct here", 1);
10+
-----------------------------------
11+
12+
Grammar: TypeScript.tmLanguage
13+
-----------------------------------
14+
>let myFunc = function<T,U>(txt:string,num:number){}
15+
^^^
16+
source.ts meta.var.expr.ts storage.type.ts
17+
^
18+
source.ts meta.var.expr.ts
19+
^^^^^^
20+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts entity.name.function.ts
21+
^
22+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
23+
^
24+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
25+
^
26+
source.ts meta.var.expr.ts
27+
^^^^^^^^
28+
source.ts meta.var.expr.ts meta.function.expression.ts storage.type.function.ts
29+
^
30+
source.ts meta.var.expr.ts meta.function.expression.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
31+
^
32+
source.ts meta.var.expr.ts meta.function.expression.ts meta.type.parameters.ts entity.name.type.ts
33+
^
34+
source.ts meta.var.expr.ts meta.function.expression.ts meta.type.parameters.ts punctuation.separator.comma.ts
35+
^
36+
source.ts meta.var.expr.ts meta.function.expression.ts meta.type.parameters.ts entity.name.type.ts
37+
^
38+
source.ts meta.var.expr.ts meta.function.expression.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
39+
^
40+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
41+
^^^
42+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts variable.parameter.ts
43+
^
44+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
45+
^^^^^^
46+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
47+
^
48+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts punctuation.separator.parameter.ts
49+
^^^
50+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts variable.parameter.ts
51+
^
52+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
53+
^^^^^^
54+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
55+
^
56+
source.ts meta.var.expr.ts meta.function.expression.ts meta.parameters.ts punctuation.definition.parameters.end.ts
57+
^
58+
source.ts meta.var.expr.ts meta.function.expression.ts meta.block.ts punctuation.definition.block.ts
59+
^
60+
source.ts meta.var.expr.ts meta.function.expression.ts meta.block.ts punctuation.definition.block.ts
61+
^
62+
source.ts meta.var.expr.ts
63+
>
64+
^^
65+
source.ts
66+
>class MyClass {
67+
^^^^^
68+
source.ts meta.class.ts storage.type.class.ts
69+
^
70+
source.ts meta.class.ts
71+
^^^^^^^
72+
source.ts meta.class.ts entity.name.type.class.ts
73+
^
74+
source.ts meta.class.ts
75+
^
76+
source.ts meta.class.ts punctuation.definition.block.ts
77+
^^
78+
source.ts meta.class.ts
79+
> myProp = myFunc<number, () => void>("syntax highlight is incorrect", 1);
80+
^^
81+
source.ts meta.class.ts
82+
^^^^^^
83+
source.ts meta.class.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts
84+
^
85+
source.ts meta.class.ts meta.field.declaration.ts
86+
^
87+
source.ts meta.class.ts meta.field.declaration.ts keyword.operator.assignment.ts
88+
^
89+
source.ts meta.class.ts meta.field.declaration.ts
90+
^^^^^^
91+
source.ts meta.class.ts meta.field.declaration.ts meta.function-call.ts entity.name.function.ts
92+
^
93+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
94+
^^^^^^
95+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts support.type.primitive.ts
96+
^
97+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts punctuation.separator.comma.ts
98+
^
99+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts
100+
^
101+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
102+
^
103+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
104+
^
105+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts
106+
^^
107+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts meta.type.function.return.ts storage.type.function.arrow.ts
108+
^
109+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts meta.type.function.return.ts
110+
^^^^
111+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts meta.type.function.return.ts support.type.primitive.ts
112+
^
113+
source.ts meta.class.ts meta.field.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
114+
^
115+
source.ts meta.class.ts meta.field.declaration.ts meta.brace.round.ts
116+
^
117+
source.ts meta.class.ts meta.field.declaration.ts string.quoted.double.ts punctuation.definition.string.begin.ts
118+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
119+
source.ts meta.class.ts meta.field.declaration.ts string.quoted.double.ts
120+
^
121+
source.ts meta.class.ts meta.field.declaration.ts string.quoted.double.ts punctuation.definition.string.end.ts
122+
^
123+
source.ts meta.class.ts meta.field.declaration.ts punctuation.separator.comma.ts
124+
^
125+
source.ts meta.class.ts meta.field.declaration.ts
126+
^
127+
source.ts meta.class.ts meta.field.declaration.ts constant.numeric.decimal.ts
128+
^
129+
source.ts meta.class.ts meta.field.declaration.ts meta.brace.round.ts
130+
^
131+
source.ts meta.class.ts punctuation.terminator.statement.ts
132+
^^
133+
source.ts meta.class.ts
134+
>}
135+
^
136+
source.ts meta.class.ts punctuation.definition.block.ts
137+
^^
138+
source.ts
139+
>
140+
^^
141+
source.ts
142+
>let myProp = myFunc<number, () => void>("syntax highlight is correct here", 1);
143+
^^^
144+
source.ts meta.var.expr.ts storage.type.ts
145+
^
146+
source.ts meta.var.expr.ts
147+
^^^^^^
148+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
149+
^
150+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
151+
^
152+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
153+
^
154+
source.ts meta.var.expr.ts
155+
^^^^^^
156+
source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts
157+
^
158+
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
159+
^^^^^^
160+
source.ts meta.var.expr.ts meta.type.parameters.ts support.type.primitive.ts
161+
^
162+
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.separator.comma.ts
163+
^
164+
source.ts meta.var.expr.ts meta.type.parameters.ts
165+
^
166+
source.ts meta.var.expr.ts meta.type.parameters.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
167+
^
168+
source.ts meta.var.expr.ts meta.type.parameters.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
169+
^
170+
source.ts meta.var.expr.ts meta.type.parameters.ts
171+
^^
172+
source.ts meta.var.expr.ts meta.type.parameters.ts meta.type.function.return.ts storage.type.function.arrow.ts
173+
^
174+
source.ts meta.var.expr.ts meta.type.parameters.ts meta.type.function.return.ts
175+
^^^^
176+
source.ts meta.var.expr.ts meta.type.parameters.ts meta.type.function.return.ts support.type.primitive.ts
177+
^
178+
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
179+
^
180+
source.ts meta.var.expr.ts meta.brace.round.ts
181+
^
182+
source.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.begin.ts
183+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
184+
source.ts meta.var.expr.ts string.quoted.double.ts
185+
^
186+
source.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.end.ts
187+
^
188+
source.ts meta.var.expr.ts punctuation.separator.comma.ts
189+
^
190+
source.ts meta.var.expr.ts
191+
^
192+
source.ts meta.var.expr.ts constant.numeric.decimal.ts
193+
^
194+
source.ts meta.var.expr.ts meta.brace.round.ts
195+
^
196+
source.ts punctuation.terminator.statement.ts

0 commit comments

Comments
 (0)