Skip to content

Commit 31a1bbe

Browse files
committed
Fix regexp tail detection
Fixes #786
1 parent 477c1b1 commit 31a1bbe

File tree

5 files changed

+72
-8
lines changed

5 files changed

+72
-8
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ variables:
127127
{{functionLikeType}} |
128128
(:\s*(=>|{{matchingParenthesis}}|(<[^<>]*>)|[^<>(),=])+={{functionOrArrowLookup}})
129129
arrowFunctionEnd: (?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))
130-
completeRegexp: \/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))
130+
regexpTail: ([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$])
131+
completeRegexp: \/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/{{regexpTail}})
131132

132133
patterns:
133134
- include: '#directives'
@@ -2600,7 +2601,7 @@ repository:
26002601
regex:
26012602
patterns:
26022603
- name: string.regexp.ts
2603-
begin: (?<!\+\+|--|})(?<=[=(:,\[?+!]|{{lookBehindReturn}}|{{lookBehindCase}}|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))
2604+
begin: (?<!\+\+|--|})(?<=[=(:,\[?+!]|{{lookBehindReturn}}|{{lookBehindCase}}|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/{{regexpTail}})
26042605
beginCaptures:
26052606
'1': { name: punctuation.definition.string.begin.ts }
26062607
end: (/)([gimsuy]*)

TypeScript.tmLanguage

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4081,7 +4081,7 @@
40814081
<key>name</key>
40824082
<string>string.regexp.ts</string>
40834083
<key>begin</key>
4084-
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))</string>
4084+
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$]))</string>
40854085
<key>beginCaptures</key>
40864086
<dict>
40874087
<key>0</key>
@@ -7844,7 +7844,7 @@
78447844
<key>name</key>
78457845
<string>string.regexp.ts</string>
78467846
<key>begin</key>
7847-
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))</string>
7847+
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$]))</string>
78487848
<key>beginCaptures</key>
78497849
<dict>
78507850
<key>1</key>
@@ -7880,7 +7880,7 @@
78807880
<key>name</key>
78817881
<string>string.regexp.ts</string>
78827882
<key>begin</key>
7883-
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))</string>
7883+
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$]))</string>
78847884
<key>beginCaptures</key>
78857885
<dict>
78867886
<key>0</key>

TypeScriptReact.tmLanguage

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4103,7 +4103,7 @@
41034103
<key>name</key>
41044104
<string>string.regexp.tsx</string>
41054105
<key>begin</key>
4106-
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))</string>
4106+
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$]))</string>
41074107
<key>beginCaptures</key>
41084108
<dict>
41094109
<key>0</key>
@@ -7792,7 +7792,7 @@
77927792
<key>name</key>
77937793
<string>string.regexp.tsx</string>
77947794
<key>begin</key>
7795-
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))</string>
7795+
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$]))</string>
77967796
<key>beginCaptures</key>
77977797
<dict>
77987798
<key>1</key>
@@ -7828,7 +7828,7 @@
78287828
<key>name</key>
78297829
<string>string.regexp.tsx</string>
78307830
<key>begin</key>
7831-
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/[gimsuy]*(?!\s*[a-zA-Z0-9_$]))</string>
7831+
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)+\])+\/([gimsuy]+|(?!\*))(?!\s*[a-zA-Z0-9_$]))</string>
78327832
<key>beginCaptures</key>
78337833
<dict>
78347834
<key>0</key>

tests/baselines/Issue786.baseline.txt

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
original file
2+
-----------------------------------
3+
const a = "6" / 2; /*comment*/ const b = 5;
4+
-----------------------------------
5+
6+
Grammar: TypeScript.tmLanguage
7+
-----------------------------------
8+
>const a = "6" / 2; /*comment*/ const b = 5;
9+
^^^^^
10+
source.ts meta.var.expr.ts storage.type.ts
11+
^
12+
source.ts meta.var.expr.ts
13+
^
14+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
15+
^
16+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
17+
^
18+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
19+
^
20+
source.ts meta.var.expr.ts
21+
^
22+
source.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.begin.ts
23+
^
24+
source.ts meta.var.expr.ts string.quoted.double.ts
25+
^
26+
source.ts meta.var.expr.ts string.quoted.double.ts punctuation.definition.string.end.ts
27+
^
28+
source.ts meta.var.expr.ts
29+
^
30+
source.ts meta.var.expr.ts keyword.operator.arithmetic.ts
31+
^
32+
source.ts meta.var.expr.ts
33+
^
34+
source.ts meta.var.expr.ts constant.numeric.decimal.ts
35+
^
36+
source.ts punctuation.terminator.statement.ts
37+
^
38+
source.ts
39+
^^
40+
source.ts comment.block.ts punctuation.definition.comment.ts
41+
^^^^^^^
42+
source.ts comment.block.ts
43+
^^
44+
source.ts comment.block.ts punctuation.definition.comment.ts
45+
^
46+
source.ts
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.constant.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 constant.numeric.decimal.ts
61+
^
62+
source.ts punctuation.terminator.statement.ts

tests/cases/Issue786.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
const a = "6" / 2; /*comment*/ const b = 5;

0 commit comments

Comments
 (0)