Skip to content

Commit dcfca7b

Browse files
authored
Add 'd' flag from the RegExp Match Indices proposal (#862)
1 parent 4ecf458 commit dcfca7b

File tree

5 files changed

+62
-17
lines changed

5 files changed

+62
-17
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ variables:
135135
{{functionLikeType}} |
136136
(:\s*(=>|{{matchingParenthesis}}|(<[^<>]*>)|[^<>(),=])+={{functionOrArrowLookup}})
137137
arrowFunctionEnd: (?==>|\{|(^\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\s+))
138-
regexpTail: ([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])
138+
regexpTail: ([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$])
139139
completeRegexp: \/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/{{regexpTail}})
140140

141141
patterns:
@@ -1306,7 +1306,7 @@ repository:
13061306
begin: (?<=\))\s*{{completeRegexp}}
13071307
beginCaptures:
13081308
'0': { name: punctuation.definition.string.begin.ts }
1309-
end: (/)([gimsuy]*)
1309+
end: (/)([dgimsuy]*)
13101310
endCaptures:
13111311
'1': { name: punctuation.definition.string.end.ts }
13121312
'2': { name: keyword.other.ts }
@@ -2724,7 +2724,7 @@ repository:
27242724
begin: (?<!\+\+|--|})(?<=[=(:,\[?+!]|{{lookBehindReturn}}|{{lookBehindCase}}|=>|&&|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/{{regexpTail}})
27252725
beginCaptures:
27262726
'1': { name: punctuation.definition.string.begin.ts }
2727-
end: (/)([gimsuy]*)
2727+
end: (/)([dgimsuy]*)
27282728
endCaptures:
27292729
'1': { name: punctuation.definition.string.end.ts }
27302730
'2': { name: keyword.other.ts}
@@ -2735,7 +2735,7 @@ repository:
27352735
begin: ((?<![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?<={{lookBehindReturn}}|{{lookBehindCase}}))\s*){{completeRegexp}}
27362736
beginCaptures:
27372737
'0': { name: punctuation.definition.string.begin.ts }
2738-
end: (/)([gimsuy]*)
2738+
end: (/)([dgimsuy]*)
27392739
endCaptures:
27402740
'1': { name: punctuation.definition.string.end.ts }
27412741
'2': { name: keyword.other.ts }

TypeScript.tmLanguage

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4168,7 +4168,7 @@
41684168
<key>name</key>
41694169
<string>string.regexp.ts</string>
41704170
<key>begin</key>
4171-
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
4171+
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
41724172
<key>beginCaptures</key>
41734173
<dict>
41744174
<key>0</key>
@@ -4178,7 +4178,7 @@
41784178
</dict>
41794179
</dict>
41804180
<key>end</key>
4181-
<string>(/)([gimsuy]*)</string>
4181+
<string>(/)([dgimsuy]*)</string>
41824182
<key>endCaptures</key>
41834183
<dict>
41844184
<key>1</key>
@@ -8227,7 +8227,7 @@
82278227
<key>name</key>
82288228
<string>string.regexp.ts</string>
82298229
<key>begin</key>
8230-
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8230+
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
82318231
<key>beginCaptures</key>
82328232
<dict>
82338233
<key>1</key>
@@ -8237,7 +8237,7 @@
82378237
</dict>
82388238
</dict>
82398239
<key>end</key>
8240-
<string>(/)([gimsuy]*)</string>
8240+
<string>(/)([dgimsuy]*)</string>
82418241
<key>endCaptures</key>
82428242
<dict>
82438243
<key>1</key>
@@ -8263,7 +8263,7 @@
82638263
<key>name</key>
82648264
<string>string.regexp.ts</string>
82658265
<key>begin</key>
8266-
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8266+
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
82678267
<key>beginCaptures</key>
82688268
<dict>
82698269
<key>0</key>
@@ -8273,7 +8273,7 @@
82738273
</dict>
82748274
</dict>
82758275
<key>end</key>
8276-
<string>(/)([gimsuy]*)</string>
8276+
<string>(/)([dgimsuy]*)</string>
82778277
<key>endCaptures</key>
82788278
<dict>
82798279
<key>1</key>

TypeScriptReact.tmLanguage

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4190,7 +4190,7 @@
41904190
<key>name</key>
41914191
<string>string.regexp.tsx</string>
41924192
<key>begin</key>
4193-
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
4193+
<string>(?&lt;=\))\s*\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
41944194
<key>beginCaptures</key>
41954195
<dict>
41964196
<key>0</key>
@@ -4200,7 +4200,7 @@
42004200
</dict>
42014201
</dict>
42024202
<key>end</key>
4203-
<string>(/)([gimsuy]*)</string>
4203+
<string>(/)([dgimsuy]*)</string>
42044204
<key>endCaptures</key>
42054205
<dict>
42064206
<key>1</key>
@@ -8175,7 +8175,7 @@
81758175
<key>name</key>
81768176
<string>string.regexp.tsx</string>
81778177
<key>begin</key>
8178-
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8178+
<string>(?&lt;!\+\+|--|})(?&lt;=[=(:,\[?+!]|^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case|=&gt;|&amp;&amp;|\|\||\*\/)\s*(\/)(?![\/*])(?=(?:[^\/\\\[\()]|\\.|\[([^\]\\]|\\.)+\]|\(([^\)\\]|\\.)+\))+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
81798179
<key>beginCaptures</key>
81808180
<dict>
81818181
<key>1</key>
@@ -8185,7 +8185,7 @@
81858185
</dict>
81868186
</dict>
81878187
<key>end</key>
8188-
<string>(/)([gimsuy]*)</string>
8188+
<string>(/)([dgimsuy]*)</string>
81898189
<key>endCaptures</key>
81908190
<dict>
81918191
<key>1</key>
@@ -8211,7 +8211,7 @@
82118211
<key>name</key>
82128212
<string>string.regexp.tsx</string>
82138213
<key>begin</key>
8214-
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([gimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
8214+
<string>((?&lt;![_$[:alnum:])\]]|\+\+|--|}|\*\/)|((?&lt;=^return|[^\._$[:alnum:]]return|^case|[^\._$[:alnum:]]case))\s*)\/(?![\/*])(?=(?:[^\/\\\[]|\\.|\[([^\]\\]|\\.)*\])+\/([dgimsuy]+|(?![\/\*])|(?=\/\*))(?!\s*[a-zA-Z0-9_$]))</string>
82158215
<key>beginCaptures</key>
82168216
<dict>
82178217
<key>0</key>
@@ -8221,7 +8221,7 @@
82218221
</dict>
82228222
</dict>
82238223
<key>end</key>
8224-
<string>(/)([gimsuy]*)</string>
8224+
<string>(/)([dgimsuy]*)</string>
82258225
<key>endCaptures</key>
82268226
<dict>
82278227
<key>1</key>

tests/baselines/regexp.baseline.txt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ original file
22
-----------------------------------
33
var a = /(?:([a-zA-Z_$][\w$])*)/i;
44
var x = /\s*\b(async\s+)?function\b/g;
5+
var d = /\s*\b(async\s+)?function\b/d;
56
-----------------------------------
67

78
Grammar: TypeScript.tmLanguage
@@ -58,6 +59,49 @@ Grammar: TypeScript.tmLanguage
5859
^
5960
source.ts punctuation.terminator.statement.ts
6061
>var x = /\s*\b(async\s+)?function\b/g;
62+
^^^
63+
source.ts meta.var.expr.ts storage.type.ts
64+
^
65+
source.ts meta.var.expr.ts
66+
^
67+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
68+
^
69+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
70+
^
71+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
72+
^
73+
source.ts meta.var.expr.ts string.regexp.ts
74+
^
75+
source.ts meta.var.expr.ts string.regexp.ts punctuation.definition.string.begin.ts
76+
^^
77+
source.ts meta.var.expr.ts string.regexp.ts constant.other.character-class.regexp
78+
^
79+
source.ts meta.var.expr.ts string.regexp.ts keyword.operator.quantifier.regexp
80+
^^
81+
source.ts meta.var.expr.ts string.regexp.ts keyword.control.anchor.regexp
82+
^
83+
source.ts meta.var.expr.ts string.regexp.ts meta.group.regexp punctuation.definition.group.regexp
84+
^^^^^
85+
source.ts meta.var.expr.ts string.regexp.ts meta.group.regexp
86+
^^
87+
source.ts meta.var.expr.ts string.regexp.ts meta.group.regexp constant.other.character-class.regexp
88+
^
89+
source.ts meta.var.expr.ts string.regexp.ts meta.group.regexp keyword.operator.quantifier.regexp
90+
^
91+
source.ts meta.var.expr.ts string.regexp.ts meta.group.regexp punctuation.definition.group.regexp
92+
^
93+
source.ts meta.var.expr.ts string.regexp.ts keyword.operator.quantifier.regexp
94+
^^^^^^^^
95+
source.ts meta.var.expr.ts string.regexp.ts
96+
^^
97+
source.ts meta.var.expr.ts string.regexp.ts keyword.control.anchor.regexp
98+
^
99+
source.ts meta.var.expr.ts string.regexp.ts punctuation.definition.string.end.ts
100+
^
101+
source.ts meta.var.expr.ts string.regexp.ts keyword.other.ts
102+
^
103+
source.ts punctuation.terminator.statement.ts
104+
>var d = /\s*\b(async\s+)?function\b/d;
61105
^^^
62106
source.ts meta.var.expr.ts storage.type.ts
63107
^

tests/cases/regexp.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
var a = /(?:([a-zA-Z_$][\w$])*)/i;
2-
var x = /\s*\b(async\s+)?function\b/g;
2+
var x = /\s*\b(async\s+)?function\b/g;
3+
var d = /\s*\b(async\s+)?function\b/d;

0 commit comments

Comments
 (0)