Skip to content

Commit 4d0bdeb

Browse files
committed
Consume support functions during function call scoping so that in tsx the typeparameters are not assumed to be tags
Fixes #344 and #351
1 parent 5e50d11 commit 4d0bdeb

File tree

7 files changed

+214
-30
lines changed

7 files changed

+214
-30
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ repository:
196196
- include: '#new-expr'
197197
- include: '#object-literal'
198198
- include: '#expression-operators'
199-
- include: '#support-objects'
200199
- include: '#function-call'
200+
- include: '#support-objects'
201201
- include: '#identifiers'
202202
- include: '#paren-expression'
203203
- include: '#punctuation-comma'
@@ -1317,12 +1317,14 @@ repository:
13171317
'4': { name: support.function.dom.ts }
13181318
13191319
function-call:
1320-
begin: (?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(<([^<>]|\<[^<>]+\>)+>\s*)?\()
1321-
beginCaptures:
1322-
'1': { name: punctuation.accessor.ts }
1323-
'2': { name: entity.name.function.ts }
1324-
end: (?<=\))
1320+
begin: (?=(\.\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(<([^<>]|\<[^<>]+\>)+>\s*)?\()
1321+
end: (?<=\))(?!(\.\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(<([^<>]|\<[^<>]+\>)+>\s*)?\()
13251322
patterns:
1323+
- include: '#support-objects'
1324+
- name: punctuation.accessor.ts
1325+
match: \.
1326+
- name: entity.name.function.ts
1327+
match: ([_$[:alpha:]][_$[:alnum:]]*)
13261328
- include: '#comment'
13271329
- name: meta.type.parameters.ts
13281330
begin: \<

TypeScript.tmLanguage

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -559,11 +559,11 @@
559559
</dict>
560560
<dict>
561561
<key>include</key>
562-
<string>#support-objects</string>
562+
<string>#function-call</string>
563563
</dict>
564564
<dict>
565565
<key>include</key>
566-
<string>#function-call</string>
566+
<string>#support-objects</string>
567567
</dict>
568568
<dict>
569569
<key>include</key>
@@ -3573,24 +3573,27 @@
35733573
<key>function-call</key>
35743574
<dict>
35753575
<key>begin</key>
3576-
<string>(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
3577-
<key>beginCaptures</key>
3578-
<dict>
3579-
<key>1</key>
3576+
<string>(?=(\.\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
3577+
<key>end</key>
3578+
<string>(?&lt;=\))(?!(\.\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
3579+
<key>patterns</key>
3580+
<array>
3581+
<dict>
3582+
<key>include</key>
3583+
<string>#support-objects</string>
3584+
</dict>
35803585
<dict>
35813586
<key>name</key>
35823587
<string>punctuation.accessor.ts</string>
3588+
<key>match</key>
3589+
<string>\.</string>
35833590
</dict>
3584-
<key>2</key>
35853591
<dict>
35863592
<key>name</key>
35873593
<string>entity.name.function.ts</string>
3594+
<key>match</key>
3595+
<string>([_$[:alpha:]][_$[:alnum:]]*)</string>
35883596
</dict>
3589-
</dict>
3590-
<key>end</key>
3591-
<string>(?&lt;=\))</string>
3592-
<key>patterns</key>
3593-
<array>
35943597
<dict>
35953598
<key>include</key>
35963599
<string>#comment</string>

TypeScriptReact.tmLanguage

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -563,11 +563,11 @@
563563
</dict>
564564
<dict>
565565
<key>include</key>
566-
<string>#support-objects</string>
566+
<string>#function-call</string>
567567
</dict>
568568
<dict>
569569
<key>include</key>
570-
<string>#function-call</string>
570+
<string>#support-objects</string>
571571
</dict>
572572
<dict>
573573
<key>include</key>
@@ -3577,24 +3577,27 @@
35773577
<key>function-call</key>
35783578
<dict>
35793579
<key>begin</key>
3580-
<string>(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?=(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
3581-
<key>beginCaptures</key>
3582-
<dict>
3583-
<key>1</key>
3580+
<string>(?=(\.\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
3581+
<key>end</key>
3582+
<string>(?&lt;=\))(?!(\.\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\()</string>
3583+
<key>patterns</key>
3584+
<array>
3585+
<dict>
3586+
<key>include</key>
3587+
<string>#support-objects</string>
3588+
</dict>
35843589
<dict>
35853590
<key>name</key>
35863591
<string>punctuation.accessor.tsx</string>
3592+
<key>match</key>
3593+
<string>\.</string>
35873594
</dict>
3588-
<key>2</key>
35893595
<dict>
35903596
<key>name</key>
35913597
<string>entity.name.function.tsx</string>
3598+
<key>match</key>
3599+
<string>([_$[:alpha:]][_$[:alnum:]]*)</string>
35923600
</dict>
3593-
</dict>
3594-
<key>end</key>
3595-
<string>(?&lt;=\))</string>
3596-
<key>patterns</key>
3597-
<array>
35983601
<dict>
35993602
<key>include</key>
36003603
<string>#comment</string>

tests/baselines/Issue344.baseline.txt

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
original file
2+
-----------------------------------
3+
let a = Array<number>(); // Highlight ok here
4+
5+
interface egGenericsInArray {
6+
a: Array<number>;
7+
}
8+
let s = "nothing should fail here...";
9+
-----------------------------------
10+
11+
Grammar: TypeScriptReact.tmLanguage
12+
-----------------------------------
13+
>let a = Array<number>(); // Highlight ok here
14+
^^^
15+
source.tsx meta.var.expr.tsx storage.type.tsx
16+
^
17+
source.tsx meta.var.expr.tsx
18+
^
19+
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx
20+
^
21+
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx
22+
^
23+
source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx
24+
^
25+
source.tsx meta.var.expr.tsx
26+
^^^^^
27+
source.tsx meta.var.expr.tsx support.class.builtin.tsx
28+
^
29+
source.tsx meta.var.expr.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx
30+
^^^^^^
31+
source.tsx meta.var.expr.tsx meta.type.parameters.tsx support.type.primitive.tsx
32+
^
33+
source.tsx meta.var.expr.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx
34+
^
35+
source.tsx meta.var.expr.tsx meta.brace.round.tsx
36+
^
37+
source.tsx meta.var.expr.tsx meta.brace.round.tsx
38+
^
39+
source.tsx punctuation.terminator.statement.tsx
40+
^^^
41+
source.tsx
42+
^^
43+
source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx
44+
^^^^^^^^^^^^^^^^^^^
45+
source.tsx comment.line.double-slash.tsx
46+
>
47+
^^
48+
source.tsx
49+
>interface egGenericsInArray {
50+
^^^^^^^^^
51+
source.tsx meta.class.tsx storage.type.interface.tsx
52+
^
53+
source.tsx meta.class.tsx
54+
^^^^^^^^^^^^^^^^^
55+
source.tsx meta.class.tsx entity.name.type.class.tsx
56+
^
57+
source.tsx meta.class.tsx
58+
^
59+
source.tsx meta.class.tsx punctuation.definition.block.tsx
60+
^^
61+
source.tsx meta.class.tsx
62+
> a: Array<number>;
63+
^^^
64+
source.tsx meta.class.tsx
65+
^
66+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.definition.property.tsx variable.object.property.tsx
67+
^
68+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.type.annotation.tsx keyword.operator.type.annotation.tsx
69+
^
70+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.type.annotation.tsx
71+
^^^^^
72+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.type.annotation.tsx entity.name.type.tsx
73+
^
74+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.type.annotation.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx
75+
^^^^^^
76+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.type.annotation.tsx meta.type.parameters.tsx support.type.primitive.tsx
77+
^
78+
source.tsx meta.class.tsx meta.field.declaration.tsx meta.type.annotation.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx
79+
^
80+
source.tsx meta.class.tsx punctuation.terminator.statement.tsx
81+
^^
82+
source.tsx meta.class.tsx
83+
>}
84+
^
85+
source.tsx meta.class.tsx punctuation.definition.block.tsx
86+
^^
87+
source.tsx
88+
>let s = "nothing should fail here...";
89+
^^^
90+
source.tsx meta.var.expr.tsx storage.type.tsx
91+
^
92+
source.tsx meta.var.expr.tsx
93+
^
94+
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx
95+
^
96+
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx
97+
^
98+
source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx
99+
^
100+
source.tsx meta.var.expr.tsx
101+
^
102+
source.tsx meta.var.expr.tsx string.quoted.double.tsx punctuation.definition.string.begin.tsx
103+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
104+
source.tsx meta.var.expr.tsx string.quoted.double.tsx
105+
^
106+
source.tsx meta.var.expr.tsx string.quoted.double.tsx punctuation.definition.string.end.tsx
107+
^
108+
source.tsx punctuation.terminator.statement.tsx

tests/baselines/Issue351.baseline.txt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
original file
2+
-----------------------------------
3+
this._blockRenderMap = Map<any>({});
4+
this._eventsMap = {};
5+
-----------------------------------
6+
7+
Grammar: TypeScriptReact.tmLanguage
8+
-----------------------------------
9+
>this._blockRenderMap = Map<any>({});
10+
^^^^
11+
source.tsx variable.language.this.tsx
12+
^
13+
source.tsx punctuation.accessor.tsx
14+
^^^^^^^^^^^^^^^
15+
source.tsx variable.other.property.tsx
16+
^
17+
source.tsx
18+
^
19+
source.tsx keyword.operator.assignment.tsx
20+
^
21+
source.tsx
22+
^^^
23+
source.tsx support.class.builtin.tsx
24+
^
25+
source.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx
26+
^^^
27+
source.tsx meta.type.parameters.tsx support.type.primitive.tsx
28+
^
29+
source.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx
30+
^
31+
source.tsx meta.brace.round.tsx
32+
^
33+
source.tsx meta.objectliteral.tsx punctuation.definition.block.tsx
34+
^
35+
source.tsx meta.objectliteral.tsx punctuation.definition.block.tsx
36+
^
37+
source.tsx meta.brace.round.tsx
38+
^
39+
source.tsx punctuation.terminator.statement.tsx
40+
^^
41+
source.tsx
42+
>this._eventsMap = {};
43+
^^^^
44+
source.tsx variable.language.this.tsx
45+
^
46+
source.tsx punctuation.accessor.tsx
47+
^^^^^^^^^^
48+
source.tsx variable.other.property.tsx
49+
^
50+
source.tsx
51+
^
52+
source.tsx keyword.operator.assignment.tsx
53+
^
54+
source.tsx meta.objectliteral.tsx
55+
^
56+
source.tsx meta.objectliteral.tsx punctuation.definition.block.tsx
57+
^
58+
source.tsx meta.objectliteral.tsx punctuation.definition.block.tsx
59+
^
60+
source.tsx punctuation.terminator.statement.tsx

tests/cases/Issue344.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
let a = Array<number>(); // Highlight ok here
2+
3+
interface egGenericsInArray {
4+
a: Array<number>;
5+
}
6+
let s = "nothing should fail here...";

tests/cases/Issue351.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
this._blockRenderMap = Map<any>({});
2+
this._eventsMap = {};

0 commit comments

Comments
 (0)