Skip to content

Commit f833322

Browse files
authored
Merge pull request #768 from Kingwl/master
add nullish coalescing support
2 parents 84238ef + ce39790 commit f833322

File tree

5 files changed

+295
-6
lines changed

5 files changed

+295
-6
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,7 +1416,7 @@ repository:
14161416

14171417
#ternary expression
14181418
ternary-expression:
1419-
begin: (?!\?\.\s*[^[:digit:]])(\?)
1419+
begin: (?!\?\.\s*[^[:digit:]])(\?)(?!\?)
14201420
beginCaptures:
14211421
'1': { name: keyword.operator.ternary.ts }
14221422
end: \s*(:)
@@ -1634,7 +1634,7 @@ repository:
16341634
- name: keyword.operator.relational.ts
16351635
match: <=|>=|<>|<|>
16361636
- name: keyword.operator.logical.ts
1637-
match: \!|&&|\|\|
1637+
match: \!|&&|\|\||\?\?
16381638
- name: keyword.operator.bitwise.ts
16391639
match: \&|~|\^|\|
16401640
- name: keyword.operator.assignment.ts

TypeScript.tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4590,7 +4590,7 @@
45904590
<key>ternary-expression</key>
45914591
<dict>
45924592
<key>begin</key>
4593-
<string>(?!\?\.\s*[^[:digit:]])(\?)</string>
4593+
<string>(?!\?\.\s*[^[:digit:]])(\?)(?!\?)</string>
45944594
<key>beginCaptures</key>
45954595
<dict>
45964596
<key>1</key>
@@ -5327,7 +5327,7 @@
53275327
<key>name</key>
53285328
<string>keyword.operator.logical.ts</string>
53295329
<key>match</key>
5330-
<string>\!|&amp;&amp;|\|\|</string>
5330+
<string>\!|&amp;&amp;|\|\||\?\?</string>
53315331
</dict>
53325332
<dict>
53335333
<key>name</key>

TypeScriptReact.tmLanguage

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4614,7 +4614,7 @@
46144614
<key>ternary-expression</key>
46154615
<dict>
46164616
<key>begin</key>
4617-
<string>(?!\?\.\s*[^[:digit:]])(\?)</string>
4617+
<string>(?!\?\.\s*[^[:digit:]])(\?)(?!\?)</string>
46184618
<key>beginCaptures</key>
46194619
<dict>
46204620
<key>1</key>
@@ -5273,7 +5273,7 @@
52735273
<key>name</key>
52745274
<string>keyword.operator.logical.tsx</string>
52755275
<key>match</key>
5276-
<string>\!|&amp;&amp;|\|\|</string>
5276+
<string>\!|&amp;&amp;|\|\||\?\?</string>
52775277
</dict>
52785278
<dict>
52795279
<key>name</key>
Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
original file
2+
-----------------------------------
3+
const brokenSyntaxHighlighting = () => {
4+
const array = a ?? b ?? c ?? d ?? g;
5+
6+
/**
7+
* No TypeEror, but syntax highlighting is broken
8+
*/
9+
const test = a ?? b ?? c ?? d ?? g;
10+
11+
for (let i = 0; i < array.length; i++) {
12+
console.log(array[i]);
13+
}
14+
};
15+
16+
brokenSyntaxHighlighting();
17+
18+
-----------------------------------
19+
20+
Grammar: TypeScript.tmLanguage
21+
-----------------------------------
22+
>const brokenSyntaxHighlighting = () => {
23+
^^^^^
24+
source.ts meta.var.expr.ts storage.type.ts
25+
^
26+
source.ts meta.var.expr.ts
27+
^^^^^^^^^^^^^^^^^^^^^^^^
28+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts
29+
^
30+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
31+
^
32+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
33+
^
34+
source.ts meta.var.expr.ts meta.arrow.ts
35+
^
36+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
37+
^
38+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
39+
^
40+
source.ts meta.var.expr.ts meta.arrow.ts
41+
^^
42+
source.ts meta.var.expr.ts meta.arrow.ts storage.type.function.arrow.ts
43+
^
44+
source.ts meta.var.expr.ts meta.arrow.ts
45+
^
46+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
47+
> const array = a ?? b ?? c ?? d ?? g;
48+
^^^^
49+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
50+
^^^^^
51+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
52+
^
53+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
54+
^^^^^
55+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
56+
^
57+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
58+
^
59+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
60+
^
61+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
62+
^
63+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
64+
^
65+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
66+
^^
67+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
68+
^
69+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
70+
^
71+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
72+
^
73+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
74+
^^
75+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
76+
^
77+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
78+
^
79+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
80+
^
81+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
82+
^^
83+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
84+
^
85+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
86+
^
87+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
88+
^
89+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
90+
^^
91+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
92+
^
93+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
94+
^
95+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
96+
^
97+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
98+
>
99+
^^^
100+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
101+
> /**
102+
^^^^
103+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
104+
^^^
105+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts comment.block.documentation.ts punctuation.definition.comment.ts
106+
> * No TypeEror, but syntax highlighting is broken
107+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
108+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts comment.block.documentation.ts
109+
> */
110+
^^^^^
111+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts comment.block.documentation.ts
112+
^^
113+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts comment.block.documentation.ts punctuation.definition.comment.ts
114+
> const test = a ?? b ?? c ?? d ?? g;
115+
^^^^
116+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
117+
^^^^^
118+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
119+
^
120+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
121+
^^^^
122+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
123+
^
124+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
125+
^
126+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
127+
^
128+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
129+
^
130+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
131+
^
132+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
133+
^^
134+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
135+
^
136+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
137+
^
138+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
139+
^
140+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
141+
^^
142+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
143+
^
144+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
145+
^
146+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
147+
^
148+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
149+
^^
150+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
151+
^
152+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
153+
^
154+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
155+
^
156+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
157+
^^
158+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.logical.ts
159+
^
160+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
161+
^
162+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
163+
^
164+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
165+
>
166+
^^^
167+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
168+
> for (let i = 0; i < array.length; i++) {
169+
^^^^
170+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
171+
^^^
172+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.control.loop.ts
173+
^
174+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
175+
^
176+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
177+
^^^
178+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
179+
^
180+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
181+
^
182+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
183+
^
184+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
185+
^
186+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
187+
^
188+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
189+
^
190+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts constant.numeric.decimal.ts
191+
^
192+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
193+
^
194+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
195+
^
196+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts variable.other.readwrite.ts
197+
^
198+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
199+
^
200+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.operator.relational.ts
201+
^
202+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
203+
^^^^^
204+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts variable.other.object.ts
205+
^
206+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.accessor.ts
207+
^^^^^^
208+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts support.variable.property.ts
209+
^
210+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
211+
^
212+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
213+
^
214+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts variable.other.readwrite.ts
215+
^^
216+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.operator.increment.ts
217+
^
218+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
219+
^
220+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
221+
^
222+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
223+
> console.log(array[i]);
224+
^^^^^^
225+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts
226+
^^^^^^^
227+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.function-call.ts support.class.console.ts
228+
^
229+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.function-call.ts punctuation.accessor.ts
230+
^^^
231+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.function-call.ts support.function.console.ts
232+
^
233+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.brace.round.ts
234+
^^^^^
235+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts variable.other.readwrite.ts
236+
^
237+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.array.literal.ts meta.brace.square.ts
238+
^
239+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.array.literal.ts variable.other.readwrite.ts
240+
^
241+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.array.literal.ts meta.brace.square.ts
242+
^
243+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts meta.brace.round.ts
244+
^
245+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts punctuation.terminator.statement.ts
246+
> }
247+
^^^^
248+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts
249+
^
250+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
251+
> };
252+
^^
253+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
254+
^
255+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
256+
^
257+
source.ts punctuation.terminator.statement.ts
258+
>
259+
^^^
260+
source.ts
261+
> brokenSyntaxHighlighting();
262+
^^
263+
source.ts
264+
^^^^^^^^^^^^^^^^^^^^^^^^
265+
source.ts meta.function-call.ts entity.name.function.ts
266+
^
267+
source.ts meta.brace.round.ts
268+
^
269+
source.ts meta.brace.round.ts
270+
^
271+
source.ts punctuation.terminator.statement.ts
272+
>
273+
^^^
274+
source.ts

tests/cases/issue522_1.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const brokenSyntaxHighlighting = () => {
2+
const array = a ?? b ?? c ?? d ?? g;
3+
4+
/**
5+
* No TypeEror, but syntax highlighting is broken
6+
*/
7+
const test = a ?? b ?? c ?? d ?? g;
8+
9+
for (let i = 0; i < array.length; i++) {
10+
console.log(array[i]);
11+
}
12+
};
13+
14+
brokenSyntaxHighlighting();
15+

0 commit comments

Comments
 (0)