Skip to content

Commit 3e5fcfa

Browse files
committed
Update the function-call typearguments matching
Fixes #538
1 parent 4b614e2 commit 3e5fcfa

File tree

5 files changed

+102
-28
lines changed

5 files changed

+102
-28
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ variables:
1313
propertyName: (({{identifier}})|{{nonIdentifierPropertyName}})
1414
constantVar: ({{constantIdentifier}})(?![_$[:alnum:]])
1515
typeParameters: (<\s*[_$[:alpha:]\{\(\[]([^<>=]|=[^<]|\<\s*[_$[:alpha:]\{\(\[]([^=<>]|=[^<])+\>)+>\s*)
16+
typeArguments: (<\s*[_$[:alpha:]\{\(\[\"\'\`]([^<>]|\<\s*[_$[:alpha:]\{\(\[\"\'\`][^<>]+\>)+>\s*)
1617
arrowLookup: |-
1718
# sure shot arrow functions even if => is on new line
1819
(
@@ -1028,12 +1029,12 @@ repository:
10281029

10291030
#function call and new expression
10301031
function-call:
1031-
begin: (?=(({{identifier}}\s*\.\s*)*|(\.\s*)?)({{identifier}})\s*{{typeParameters}}?\()
1032-
end: (?<=\))(?!(({{identifier}}\s*\.\s*)*|(\.\s*)?)({{identifier}})\s*{{typeParameters}}?\()
1032+
begin: (?=(({{identifier}}\s*\.\s*)*|(\.\s*)?)({{identifier}})\s*{{typeArguments}}?\()
1033+
end: (?<=\))(?!(({{identifier}}\s*\.\s*)*|(\.\s*)?)({{identifier}})\s*{{typeArguments}}?\()
10331034
patterns:
10341035
- name: meta.function-call.ts
10351036
begin: (?=(({{identifier}}\s*\.\s*)*|(\.\s*)?)({{identifier}}))
1036-
end: (?=\s*{{typeParameters}}?\()
1037+
end: (?=\s*{{typeArguments}}?\()
10371038
patterns:
10381039
- include: '#literal'
10391040
- include: '#support-objects'

TypeScript.tmLanguage

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3246,9 +3246,9 @@
32463246
<key>function-call</key>
32473247
<dict>
32483248
<key>begin</key>
3249-
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(\[]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\()</string>
3249+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[\"\'\`]([^&lt;&gt;]|\&lt;\s*[_$[:alpha:]\{\(\[\"\'\`][^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
32503250
<key>end</key>
3251-
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(\[]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\()</string>
3251+
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[\"\'\`]([^&lt;&gt;]|\&lt;\s*[_$[:alpha:]\{\(\[\"\'\`][^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
32523252
<key>patterns</key>
32533253
<array>
32543254
<dict>
@@ -3257,7 +3257,7 @@
32573257
<key>begin</key>
32583258
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
32593259
<key>end</key>
3260-
<string>(?=\s*(&lt;\s*[_$[:alpha:]\{\(\[]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(\[]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\()</string>
3260+
<string>(?=\s*(&lt;\s*[_$[:alpha:]\{\(\[\"\'\`]([^&lt;&gt;]|\&lt;\s*[_$[:alpha:]\{\(\[\"\'\`][^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
32613261
<key>patterns</key>
32623262
<array>
32633263
<dict>

TypeScriptReact.tmLanguage

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3250,9 +3250,9 @@
32503250
<key>function-call</key>
32513251
<dict>
32523252
<key>begin</key>
3253-
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(\[]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\()</string>
3253+
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[\"\'\`]([^&lt;&gt;]|\&lt;\s*[_$[:alpha:]\{\(\[\"\'\`][^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
32543254
<key>end</key>
3255-
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(\[]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\()</string>
3255+
<string>(?&lt;=\))(?!(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;\s*[_$[:alpha:]\{\(\[\"\'\`]([^&lt;&gt;]|\&lt;\s*[_$[:alpha:]\{\(\[\"\'\`][^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
32563256
<key>patterns</key>
32573257
<array>
32583258
<dict>
@@ -3261,7 +3261,7 @@
32613261
<key>begin</key>
32623262
<string>(?=(([_$[:alpha:]][_$[:alnum:]]*\s*\.\s*)*|(\.\s*)?)([_$[:alpha:]][_$[:alnum:]]*))</string>
32633263
<key>end</key>
3264-
<string>(?=\s*(&lt;\s*[_$[:alpha:]\{\(\[]([^&lt;&gt;=]|=[^&lt;]|\&lt;\s*[_$[:alpha:]\{\(\[]([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\()</string>
3264+
<string>(?=\s*(&lt;\s*[_$[:alpha:]\{\(\[\"\'\`]([^&lt;&gt;]|\&lt;\s*[_$[:alpha:]\{\(\[\"\'\`][^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
32653265
<key>patterns</key>
32663266
<array>
32673267
<dict>
@@ -6569,20 +6569,16 @@
65696569
<key>include</key>
65706570
<string>#jsx-tag-in-expression</string>
65716571
</dict>
6572-
<dict>
6573-
<key>include</key>
6574-
<string>#jsx-tag-invalid</string>
6575-
</dict>
65766572
</array>
65776573
</dict>
65786574
<key>jsx-tag-without-attributes-in-expression</key>
65796575
<dict>
65806576
<key>begin</key>
65816577
<string>(?x)
65826578
(?&lt;=[({\[,?=&gt;:*]|&amp;&amp;|\|\||\?|\Wreturn|^return|\Wdefault|^)\s*
6583-
(?=(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
6579+
(?=(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
65846580
<key>end</key>
6585-
<string>(?!\s*(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;))</string>
6581+
<string>(?!\s*(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;))</string>
65866582
<key>patterns</key>
65876583
<array>
65886584
<dict>
@@ -6596,9 +6592,9 @@
65966592
<key>name</key>
65976593
<string>meta.tag.without-attributes.tsx</string>
65986594
<key>begin</key>
6599-
<string>(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;)</string>
6595+
<string>(&lt;)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)</string>
66006596
<key>end</key>
6601-
<string>(&lt;/)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))\s*(&gt;)</string>
6597+
<string>(&lt;/)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?&lt;!\.|-))?\s*(&gt;)</string>
66026598
<key>beginCaptures</key>
66036599
<dict>
66046600
<key>1</key>
@@ -6839,13 +6835,6 @@
68396835
</dict>
68406836
</array>
68416837
</dict>
6842-
<key>jsx-tag-invalid</key>
6843-
<dict>
6844-
<key>name</key>
6845-
<string>invalid.illegal.tag.incomplete.tsx</string>
6846-
<key>match</key>
6847-
<string>&lt;\s*&gt;</string>
6848-
</dict>
68496838
<key>jsx-children</key>
68506839
<dict>
68516840
<key>patterns</key>
@@ -6858,10 +6847,6 @@
68586847
<key>include</key>
68596848
<string>#jsx-child-tag</string>
68606849
</dict>
6861-
<dict>
6862-
<key>include</key>
6863-
<string>#jsx-tag-invalid</string>
6864-
</dict>
68656850
<dict>
68666851
<key>include</key>
68676852
<string>#jsx-evaluated-code</string>

tests/baselines/Issue538.baseline.txt

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
original file
2+
-----------------------------------
3+
declare function f<T, U>(): void;
4+
const x = f<"a", "b">();
5+
-----------------------------------
6+
7+
Grammar: TypeScript.tmLanguage
8+
-----------------------------------
9+
>declare function f<T, U>(): void;
10+
^^^^^^^
11+
source.ts storage.modifier.ts
12+
^
13+
source.ts
14+
^^^^^^^^
15+
source.ts meta.function.ts storage.type.function.ts
16+
^
17+
source.ts meta.function.ts
18+
^
19+
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
20+
^
21+
source.ts meta.function.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
22+
^
23+
source.ts meta.function.ts meta.type.parameters.ts entity.name.type.ts
24+
^
25+
source.ts meta.function.ts meta.type.parameters.ts punctuation.separator.comma.ts
26+
^
27+
source.ts meta.function.ts meta.type.parameters.ts
28+
^
29+
source.ts meta.function.ts meta.type.parameters.ts entity.name.type.ts
30+
^
31+
source.ts meta.function.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
32+
^
33+
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
34+
^
35+
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
36+
^
37+
source.ts meta.function.ts meta.return.type.ts keyword.operator.type.annotation.ts
38+
^
39+
source.ts meta.function.ts meta.return.type.ts
40+
^^^^
41+
source.ts meta.function.ts meta.return.type.ts support.type.primitive.ts
42+
^
43+
source.ts punctuation.terminator.statement.ts
44+
^^
45+
source.ts
46+
>const x = f<"a", "b">();
47+
^^^^^
48+
source.ts meta.var.expr.ts storage.type.ts
49+
^
50+
source.ts meta.var.expr.ts
51+
^
52+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
53+
^
54+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
55+
^
56+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
57+
^
58+
source.ts meta.var.expr.ts
59+
^
60+
source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts
61+
^
62+
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
63+
^
64+
source.ts meta.var.expr.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.begin.ts
65+
^
66+
source.ts meta.var.expr.ts meta.type.parameters.ts string.quoted.double.ts
67+
^
68+
source.ts meta.var.expr.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.end.ts
69+
^
70+
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.separator.comma.ts
71+
^
72+
source.ts meta.var.expr.ts meta.type.parameters.ts
73+
^
74+
source.ts meta.var.expr.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.begin.ts
75+
^
76+
source.ts meta.var.expr.ts meta.type.parameters.ts string.quoted.double.ts
77+
^
78+
source.ts meta.var.expr.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.end.ts
79+
^
80+
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
81+
^
82+
source.ts meta.var.expr.ts meta.brace.round.ts
83+
^
84+
source.ts meta.var.expr.ts meta.brace.round.ts
85+
^
86+
source.ts punctuation.terminator.statement.ts

tests/cases/Issue538.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare function f<T, U>(): void;
2+
const x = f<"a", "b">();

0 commit comments

Comments
 (0)