Skip to content

Commit 3e592ec

Browse files
committed
Fix the regex look up to not valid if it is followed by ')'
Fixes #444
1 parent d08a6ec commit 3e592ec

File tree

5 files changed

+259
-6
lines changed

5 files changed

+259
-6
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1734,7 +1734,7 @@ repository:
17341734
regex:
17351735
patterns:
17361736
- name: string.regexp.ts
1737-
begin: (?<=[=(:,\[?+!]|return|case|=>|&&|\|\||\*\/)\s*(/)(?![/*])(?=(?:[^/\\\[]|\\.|\[([^\]\\]|\\.)+\])+/(?![/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))
1737+
begin: (?<=[=(:,\[?+!]|return|case|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))
17381738
beginCaptures:
17391739
'1': {name: punctuation.definition.string.begin.ts}
17401740
end: (/)([gimuy]*)
@@ -1745,7 +1745,7 @@ repository:
17451745
- include: '#regexp'
17461746
# Check if complete regexp syntax
17471747
- name: string.regexp.ts
1748-
begin: (?<![_$[:alnum:]])/(?![/*])(?=(?:[^/\\\[]|\\.|\[([^\]\\]|\\.)+\])+/(?![/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))
1748+
begin: (?<![_$[:alnum:])])\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))
17491749
beginCaptures:
17501750
'0': {name: punctuation.definition.string.begin.ts}
17511751
end: (/)([gimuy]*)

TypeScript.tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4759,7 +4759,7 @@
47594759
<key>name</key>
47604760
<string>string.regexp.ts</string>
47614761
<key>begin</key>
4762-
<string>(?&lt;=[=(:,\[?+!]|return|case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(/)(?![/*])(?=(?:[^/\\\[]|\\.|\[([^\]\\]|\\.)+\])+/(?![/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
4762+
<string>(?&lt;=[=(:,\[?+!]|return|case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
47634763
<key>beginCaptures</key>
47644764
<dict>
47654765
<key>1</key>
@@ -4795,7 +4795,7 @@
47954795
<key>name</key>
47964796
<string>string.regexp.ts</string>
47974797
<key>begin</key>
4798-
<string>(?&lt;![_$[:alnum:]])/(?![/*])(?=(?:[^/\\\[]|\\.|\[([^\]\\]|\\.)+\])+/(?![/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
4798+
<string>(?&lt;![_$[:alnum:])])\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
47994799
<key>beginCaptures</key>
48004800
<dict>
48014801
<key>0</key>

TypeScriptReact.tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4705,7 +4705,7 @@
47054705
<key>name</key>
47064706
<string>string.regexp.tsx</string>
47074707
<key>begin</key>
4708-
<string>(?&lt;=[=(:,\[?+!]|return|case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(/)(?![/*])(?=(?:[^/\\\[]|\\.|\[([^\]\\]|\\.)+\])+/(?![/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
4708+
<string>(?&lt;=[=(:,\[?+!]|return|case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
47094709
<key>beginCaptures</key>
47104710
<dict>
47114711
<key>1</key>
@@ -4741,7 +4741,7 @@
47414741
<key>name</key>
47424742
<string>string.regexp.tsx</string>
47434743
<key>begin</key>
4744-
<string>(?&lt;![_$[:alnum:]])/(?![/*])(?=(?:[^/\\\[]|\\.|\[([^\]\\]|\\.)+\])+/(?![/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
4744+
<string>(?&lt;![_$[:alnum:])])\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/(?![\/*])[gimy]*(?!\s*[a-zA-Z0-9_$]))</string>
47454745
<key>beginCaptures</key>
47464746
<dict>
47474747
<key>0</key>

tests/baselines/Issue444.baseline.txt

Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
original file
2+
-----------------------------------
3+
var test = "123 456";
4+
5+
if ((test.match(/\d+/g)[0]) / (test.match(/\d+/g)[1]) < 1) {
6+
return;
7+
}
8+
9+
if ((test.match(/\d+/g)[0])/(test.match(/\d+/g)[1]) < 1) {
10+
return;
11+
}
12+
-----------------------------------
13+
14+
Grammar: TypeScript.tmLanguage
15+
-----------------------------------
16+
>var test = "123 456";
17+
^^^
18+
source.ts meta.var.expr.ts storage.type.ts
19+
^
20+
source.ts meta.var.expr.ts
21+
^^^^
22+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
23+
^
24+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
25+
^
26+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
27+
^
28+
source.ts meta.var.expr.ts
29+
^
30+
source.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.begin.ts
31+
^^^^^^^
32+
source.ts meta.var.expr.ts string.quoted.double.ts
33+
^
34+
source.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.end.ts
35+
^
36+
source.ts punctuation.terminator.statement.ts
37+
^^
38+
source.ts
39+
>
40+
^^
41+
source.ts
42+
>if ((test.match(/\d+/g)[0]) / (test.match(/\d+/g)[1]) < 1) {
43+
^^
44+
source.ts keyword.control.conditional.ts
45+
^
46+
source.ts
47+
^
48+
source.ts meta.brace.round.ts
49+
^
50+
source.ts meta.brace.round.ts
51+
^^^^
52+
source.ts variable.other.object.ts
53+
^
54+
source.ts punctuation.accessor.ts
55+
^^^^^
56+
source.ts support.function.ts
57+
^
58+
source.ts meta.brace.round.ts
59+
^
60+
source.ts string.regexp.ts punctuation.definition.string.begin.ts
61+
^^
62+
source.ts string.regexp.ts constant.other.character-class.regexp
63+
^
64+
source.ts string.regexp.ts keyword.operator.quantifier.regexp
65+
^
66+
source.ts string.regexp.ts punctuation.definition.string.end.ts
67+
^
68+
source.ts string.regexp.ts keyword.other.ts
69+
^
70+
source.ts meta.brace.round.ts
71+
^
72+
source.ts meta.array.literal.ts meta.brace.square.ts
73+
^
74+
source.ts meta.array.literal.ts constant.numeric.decimal.ts
75+
^
76+
source.ts meta.array.literal.ts meta.brace.square.ts
77+
^
78+
source.ts meta.brace.round.ts
79+
^
80+
source.ts
81+
^
82+
source.ts keyword.operator.arithmetic.ts
83+
^
84+
source.ts
85+
^
86+
source.ts meta.brace.round.ts
87+
^^^^
88+
source.ts variable.other.object.ts
89+
^
90+
source.ts punctuation.accessor.ts
91+
^^^^^
92+
source.ts support.function.ts
93+
^
94+
source.ts meta.brace.round.ts
95+
^
96+
source.ts string.regexp.ts punctuation.definition.string.begin.ts
97+
^^
98+
source.ts string.regexp.ts constant.other.character-class.regexp
99+
^
100+
source.ts string.regexp.ts keyword.operator.quantifier.regexp
101+
^
102+
source.ts string.regexp.ts punctuation.definition.string.end.ts
103+
^
104+
source.ts string.regexp.ts keyword.other.ts
105+
^
106+
source.ts meta.brace.round.ts
107+
^
108+
source.ts meta.array.literal.ts meta.brace.square.ts
109+
^
110+
source.ts meta.array.literal.ts constant.numeric.decimal.ts
111+
^
112+
source.ts meta.array.literal.ts meta.brace.square.ts
113+
^
114+
source.ts meta.brace.round.ts
115+
^
116+
source.ts
117+
^
118+
source.ts keyword.operator.relational.ts
119+
^
120+
source.ts
121+
^
122+
source.ts constant.numeric.decimal.ts
123+
^
124+
source.ts meta.brace.round.ts
125+
^
126+
source.ts
127+
^
128+
source.ts meta.block.ts punctuation.definition.block.ts
129+
^^
130+
source.ts meta.block.ts
131+
> return;
132+
^^^^
133+
source.ts meta.block.ts
134+
^^^^^^
135+
source.ts meta.block.ts keyword.control.flow.ts
136+
^
137+
source.ts meta.block.ts punctuation.terminator.statement.ts
138+
^^
139+
source.ts meta.block.ts
140+
>}
141+
^
142+
source.ts meta.block.ts punctuation.definition.block.ts
143+
^^
144+
source.ts
145+
>
146+
^^
147+
source.ts
148+
>if ((test.match(/\d+/g)[0])/(test.match(/\d+/g)[1]) < 1) {
149+
^^
150+
source.ts keyword.control.conditional.ts
151+
^
152+
source.ts
153+
^
154+
source.ts meta.brace.round.ts
155+
^
156+
source.ts meta.brace.round.ts
157+
^^^^
158+
source.ts variable.other.object.ts
159+
^
160+
source.ts punctuation.accessor.ts
161+
^^^^^
162+
source.ts support.function.ts
163+
^
164+
source.ts meta.brace.round.ts
165+
^
166+
source.ts string.regexp.ts punctuation.definition.string.begin.ts
167+
^^
168+
source.ts string.regexp.ts constant.other.character-class.regexp
169+
^
170+
source.ts string.regexp.ts keyword.operator.quantifier.regexp
171+
^
172+
source.ts string.regexp.ts punctuation.definition.string.end.ts
173+
^
174+
source.ts string.regexp.ts keyword.other.ts
175+
^
176+
source.ts meta.brace.round.ts
177+
^
178+
source.ts meta.array.literal.ts meta.brace.square.ts
179+
^
180+
source.ts meta.array.literal.ts constant.numeric.decimal.ts
181+
^
182+
source.ts meta.array.literal.ts meta.brace.square.ts
183+
^
184+
source.ts meta.brace.round.ts
185+
^
186+
source.ts keyword.operator.arithmetic.ts
187+
^
188+
source.ts meta.brace.round.ts
189+
^^^^
190+
source.ts variable.other.object.ts
191+
^
192+
source.ts punctuation.accessor.ts
193+
^^^^^
194+
source.ts support.function.ts
195+
^
196+
source.ts meta.brace.round.ts
197+
^
198+
source.ts string.regexp.ts punctuation.definition.string.begin.ts
199+
^^
200+
source.ts string.regexp.ts constant.other.character-class.regexp
201+
^
202+
source.ts string.regexp.ts keyword.operator.quantifier.regexp
203+
^
204+
source.ts string.regexp.ts punctuation.definition.string.end.ts
205+
^
206+
source.ts string.regexp.ts keyword.other.ts
207+
^
208+
source.ts meta.brace.round.ts
209+
^
210+
source.ts meta.array.literal.ts meta.brace.square.ts
211+
^
212+
source.ts meta.array.literal.ts constant.numeric.decimal.ts
213+
^
214+
source.ts meta.array.literal.ts meta.brace.square.ts
215+
^
216+
source.ts meta.brace.round.ts
217+
^
218+
source.ts
219+
^
220+
source.ts keyword.operator.relational.ts
221+
^
222+
source.ts
223+
^
224+
source.ts constant.numeric.decimal.ts
225+
^
226+
source.ts meta.brace.round.ts
227+
^
228+
source.ts
229+
^
230+
source.ts meta.block.ts punctuation.definition.block.ts
231+
^^
232+
source.ts meta.block.ts
233+
> return;
234+
^^^^
235+
source.ts meta.block.ts
236+
^^^^^^
237+
source.ts meta.block.ts keyword.control.flow.ts
238+
^
239+
source.ts meta.block.ts punctuation.terminator.statement.ts
240+
^^
241+
source.ts meta.block.ts
242+
>}
243+
^
244+
source.ts meta.block.ts punctuation.definition.block.ts

tests/cases/Issue444.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
var test = "123 456";
2+
3+
if ((test.match(/\d+/g)[0]) / (test.match(/\d+/g)[1]) < 1) {
4+
return;
5+
}
6+
7+
if ((test.match(/\d+/g)[0])/(test.match(/\d+/g)[1]) < 1) {
8+
return;
9+
}

0 commit comments

Comments
 (0)