Skip to content

Commit 78b06c4

Browse files
committed
Optimize the TypeArguments of function call regex
1 parent 191f6c2 commit 78b06c4

19 files changed

+1219
-6
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ repository:
599599

600600
after-operator-block:
601601
name: meta.object-literal.ts
602-
begin: (?<=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&&|\|\||\*)\s*(\{)
602+
begin: (?<=[=(:,\[?+!]|await|return|yield|throw|in|of|typeof|&&|\|\||\*)\s*(\{)
603603
beginCaptures:
604604
'1': { name: punctuation.definition.block.ts }
605605
end: \}
@@ -894,7 +894,11 @@ repository:
894894
name: functioncall.expr.ts
895895
patterns:
896896
- name: meta.type.parameters.ts
897-
begin: '([_$[:alpha:]][_$[:alnum:]]*)(<)(?=(([^<>]+)|(\<[^<>]\>))*>\s*\()'
897+
# Ideal expression that can give us arbitary number of another level of type argument allowed is:
898+
# (<)(?=(([^<>]+)|(\<[^<>]+\>))+>\s*\()
899+
# But this takes really long time and sometimes infinite time to parse negative cases like below:
900+
# if (this.PListCells.length<value && (!this.ListList || !this.DelayedUpdate))
901+
begin: '([_$[:alpha:]][_$[:alnum:]]*)\s*(<)(?=[^<>]*(\<[^<>]+\>)*[^<>]*(\<[^<>]+\>)*[^<>]*>\s*\()'
898902
beginCaptures:
899903
'1': { name: entity.name.function.ts }
900904
'2': { name: punctuation.definition.typeparameters.begin.ts }

TypeScript.tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<key>after-operator-block</key>
2828
<dict>
2929
<key>begin</key>
30-
<string>(?&lt;=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
30+
<string>(?&lt;=[=(:,\[?+!]|await|return|yield|throw|in|of|typeof|&amp;&amp;|\|\||\*)\s*(\{)</string>
3131
<key>beginCaptures</key>
3232
<dict>
3333
<key>1</key>
@@ -1417,7 +1417,7 @@
14171417
<array>
14181418
<dict>
14191419
<key>begin</key>
1420-
<string>([_$[:alpha:]][_$[:alnum:]]*)(&lt;)(?=(([^&lt;&gt;]+)|(\&lt;[^&lt;&gt;]\&gt;))*&gt;\s*\()</string>
1420+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(&lt;)(?=[^&lt;&gt;]*(\&lt;[^&lt;&gt;]+\&gt;)*[^&lt;&gt;]*(\&lt;[^&lt;&gt;]+\&gt;)*[^&lt;&gt;]*&gt;\s*\()</string>
14211421
<key>beginCaptures</key>
14221422
<dict>
14231423
<key>1</key>

TypeScriptReact.YAML-tmLanguage

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ repository:
603603

604604
after-operator-block:
605605
name: meta.object-literal.tsx
606-
begin: (?<=[=(:,\[?+!]|^|await|return|yield|throw|in|of|typeof|&&|\|\||\*)\s*(\{)
606+
begin: (?<=[=(:,\[?+!]|await|return|yield|throw|in|of|typeof|&&|\|\||\*)\s*(\{)
607607
beginCaptures:
608608
'1': { name: punctuation.definition.block.tsx }
609609
end: \}
@@ -899,7 +899,11 @@ repository:
899899
name: functioncall.expr.tsx
900900
patterns:
901901
- name: meta.type.parameters.tsx
902-
begin: '([_$[:alpha:]][_$[:alnum:]]*)(<)(?=(([^<>]+)|(\<[^<>]\>))*>\s*\()'
902+
# Ideal expression that can give us arbitary number of another level of type argument allowed is:
903+
# (<)(?=(([^<>]+)|(\<[^<>]+\>))+>\s*\()
904+
# But this takes really long time and sometimes infinite time to parse negative cases like below:
905+
# if (this.PListCells.length<value && (!this.ListList || !this.DelayedUpdate))
906+
begin: '([_$[:alpha:]][_$[:alnum:]]*)\s*(<)(?=[^<>]*(\<[^<>]+\>)*[^<>]*(\<[^<>]+\>)*[^<>]*>\s*\()'
903907
beginCaptures:
904908
'1': { name: entity.name.function.tsx }
905909
'2': { name: punctuation.definition.typeparameters.begin.tsx }

tests/baselines/Issue11.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+
for (var i=0; i<10; i++) {
4+
var x = 1;
5+
var p = "";
6+
}
7+
-----------------------------------
8+
9+
>for (var i=0; i<10; i++) {
10+
^^^
11+
source.ts keyword.control.loop.ts
12+
^
13+
source.ts
14+
^
15+
source.ts meta.brace.round.ts
16+
^^^
17+
source.ts meta.var.expr.ts storage.type.ts
18+
^
19+
source.ts meta.var.expr.ts
20+
^
21+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
22+
^
23+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
24+
^
25+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts constant.numeric.decimal.ts
26+
^^^
27+
source.ts
28+
^
29+
source.ts keyword.operator.relational.ts
30+
^^
31+
source.ts constant.numeric.decimal.ts
32+
^^^
33+
source.ts
34+
^^
35+
source.ts keyword.operator.increment.ts
36+
^
37+
source.ts meta.brace.round.ts
38+
^
39+
source.ts
40+
^
41+
source.ts meta.block.ts punctuation.definition.block.ts
42+
^^
43+
source.ts meta.block.ts
44+
> var x = 1;
45+
^^^^
46+
source.ts meta.block.ts
47+
^^^
48+
source.ts meta.block.ts meta.var.expr.ts storage.type.ts
49+
^
50+
source.ts meta.block.ts meta.var.expr.ts
51+
^
52+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
53+
^
54+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
55+
^
56+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
57+
^
58+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
59+
^
60+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts constant.numeric.decimal.ts
61+
^^^
62+
source.ts meta.block.ts
63+
> var p = "";
64+
^^^^
65+
source.ts meta.block.ts
66+
^^^
67+
source.ts meta.block.ts meta.var.expr.ts storage.type.ts
68+
^
69+
source.ts meta.block.ts meta.var.expr.ts
70+
^
71+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
72+
^
73+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
74+
^
75+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts keyword.operator.assignment.ts
76+
^
77+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
78+
^
79+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts string.quoted.double.ts punctuation.definition.string.begin.ts
80+
^
81+
source.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts string.quoted.double.ts punctuation.definition.string.end.ts
82+
^^^
83+
source.ts meta.block.ts
84+
>}
85+
^
86+
source.ts meta.block.ts punctuation.definition.block.ts

tests/baselines/Issue152.baseline.txt

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
original file
2+
-----------------------------------
3+
var node;
4+
for(var i; i< 45;i++) {
5+
node = 234;
6+
7+
node.a = 122;
8+
node.b += 122;
9+
node.b += '1'+1+'2';
10+
}
11+
-----------------------------------
12+
13+
>var node;
14+
^^^
15+
source.ts meta.var.expr.ts storage.type.ts
16+
^
17+
source.ts meta.var.expr.ts
18+
^^^^
19+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
20+
^^^
21+
source.ts
22+
>for(var i; i< 45;i++) {
23+
^^^
24+
source.ts keyword.control.loop.ts
25+
^
26+
source.ts meta.brace.round.ts
27+
^^^
28+
source.ts meta.var.expr.ts storage.type.ts
29+
^
30+
source.ts meta.var.expr.ts
31+
^
32+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts variable.other.readwrite.ts
33+
^^^
34+
source.ts
35+
^
36+
source.ts keyword.operator.relational.ts
37+
^
38+
source.ts
39+
^^
40+
source.ts constant.numeric.decimal.ts
41+
^^
42+
source.ts
43+
^^
44+
source.ts keyword.operator.increment.ts
45+
^
46+
source.ts meta.brace.round.ts
47+
^
48+
source.ts
49+
^
50+
source.ts meta.block.ts punctuation.definition.block.ts
51+
^^
52+
source.ts meta.block.ts
53+
> node = 234;
54+
^^^^^^^^^
55+
source.ts meta.block.ts
56+
^
57+
source.ts meta.block.ts keyword.operator.assignment.ts
58+
^
59+
source.ts meta.block.ts
60+
^^^
61+
source.ts meta.block.ts constant.numeric.decimal.ts
62+
^^^
63+
source.ts meta.block.ts
64+
>
65+
^^
66+
source.ts meta.block.ts
67+
> node.a = 122;
68+
^^^^^^^^^^^
69+
source.ts meta.block.ts
70+
^
71+
source.ts meta.block.ts keyword.operator.assignment.ts
72+
^
73+
source.ts meta.block.ts
74+
^^^
75+
source.ts meta.block.ts constant.numeric.decimal.ts
76+
^^^
77+
source.ts meta.block.ts
78+
> node.b += 122;
79+
^^^^^^^^^^^
80+
source.ts meta.block.ts
81+
^^
82+
source.ts meta.block.ts keyword.operator.assignment.compound.ts
83+
^
84+
source.ts meta.block.ts
85+
^^^
86+
source.ts meta.block.ts constant.numeric.decimal.ts
87+
^^^
88+
source.ts meta.block.ts
89+
> node.b += '1'+1+'2';
90+
^^^^^^^^^^^
91+
source.ts meta.block.ts
92+
^^
93+
source.ts meta.block.ts keyword.operator.assignment.compound.ts
94+
^
95+
source.ts meta.block.ts
96+
^
97+
source.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.begin.ts
98+
^
99+
source.ts meta.block.ts string.quoted.single.ts
100+
^
101+
source.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.end.ts
102+
^
103+
source.ts meta.block.ts keyword.operator.arithmetic.ts
104+
^
105+
source.ts meta.block.ts constant.numeric.decimal.ts
106+
^
107+
source.ts meta.block.ts keyword.operator.arithmetic.ts
108+
^
109+
source.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.begin.ts
110+
^
111+
source.ts meta.block.ts string.quoted.single.ts
112+
^
113+
source.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.end.ts
114+
^^^
115+
source.ts meta.block.ts
116+
>}
117+
^
118+
source.ts meta.block.ts punctuation.definition.block.ts

0 commit comments

Comments
 (0)