Skip to content

Commit 54fc3e4

Browse files
committed
Handle NonNullOperator with arrow function
Fixes #453
1 parent 632a9db commit 54fc3e4

File tree

5 files changed

+238
-3
lines changed

5 files changed

+238
-3
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,7 @@ repository:
16621662
(?:
16631663
(?<!\.|\$)(\basync)
16641664
)?
1665-
((?<![})\]])\s*
1665+
((?<![})!\]])\s*
16661666
(?=
16671667
# sure shot arrow functions even if => is on new line
16681668
(

TypeScript.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4562,7 +4562,7 @@
45624562
<key>begin</key>
45634563
<string>(?x) (?:
45644564
(?&lt;!\.|\$)(\basync)
4565-
)? ((?&lt;![})\]])\s*
4565+
)? ((?&lt;![})!\]])\s*
45664566
(?=
45674567
# sure shot arrow functions even if =&gt; is on new line
45684568
(

TypeScriptReact.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4508,7 +4508,7 @@
45084508
<key>begin</key>
45094509
<string>(?x) (?:
45104510
(?&lt;!\.|\$)(\basync)
4511-
)? ((?&lt;![})\]])\s*
4511+
)? ((?&lt;![})!\]])\s*
45124512
(?=
45134513
# sure shot arrow functions even if =&gt; is on new line
45144514
(

tests/baselines/Issue453.baseline.txt

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
original file
2+
-----------------------------------
3+
type Resolve = () => number;
4+
5+
class Test {
6+
first(values: Map<string, Resolve>): number {
7+
return values.has('a') ? values.get('a')!() : 0;
8+
}
9+
10+
second(): string {
11+
return 'foo';
12+
}
13+
}
14+
-----------------------------------
15+
16+
Grammar: TypeScript.tmLanguage
17+
-----------------------------------
18+
>type Resolve = () => number;
19+
^^^^
20+
source.ts meta.type.declaration.ts storage.type.type.ts
21+
^
22+
source.ts meta.type.declaration.ts
23+
^^^^^^^
24+
source.ts meta.type.declaration.ts entity.name.type.alias.ts
25+
^
26+
source.ts meta.type.declaration.ts
27+
^
28+
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
29+
^
30+
source.ts meta.type.declaration.ts
31+
^
32+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
33+
^
34+
source.ts meta.type.declaration.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
35+
^
36+
source.ts meta.type.declaration.ts
37+
^^
38+
source.ts meta.type.declaration.ts meta.type.function.return.ts storage.type.function.arrow.ts
39+
^
40+
source.ts meta.type.declaration.ts meta.type.function.return.ts
41+
^^^^^^
42+
source.ts meta.type.declaration.ts meta.type.function.return.ts support.type.primitive.ts
43+
^
44+
source.ts punctuation.terminator.statement.ts
45+
^^
46+
source.ts
47+
>
48+
^^
49+
source.ts
50+
>class Test {
51+
^^^^^
52+
source.ts meta.class.ts storage.type.class.ts
53+
^
54+
source.ts meta.class.ts
55+
^^^^
56+
source.ts meta.class.ts entity.name.type.class.ts
57+
^
58+
source.ts meta.class.ts
59+
^
60+
source.ts meta.class.ts punctuation.definition.block.ts
61+
^^
62+
source.ts meta.class.ts
63+
> first(values: Map<string, Resolve>): number {
64+
^^
65+
source.ts meta.class.ts
66+
^^^^^
67+
source.ts meta.class.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
68+
^
69+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
70+
^^^^^^
71+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts variable.parameter.ts
72+
^
73+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
74+
^
75+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts
76+
^^^
77+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
78+
^
79+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
80+
^^^^^^
81+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts support.type.primitive.ts
82+
^
83+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.separator.comma.ts
84+
^
85+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts
86+
^^^^^^^
87+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts entity.name.type.ts
88+
^
89+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
90+
^
91+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
92+
^
93+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
94+
^
95+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
96+
^^^^^^
97+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts support.type.primitive.ts
98+
^
99+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
100+
^
101+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
102+
^^
103+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
104+
> return values.has('a') ? values.get('a')!() : 0;
105+
^^^^
106+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
107+
^^^^^^
108+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts keyword.control.flow.ts
109+
^
110+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
111+
^^^^^^
112+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.function-call.ts variable.other.object.ts
113+
^
114+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.function-call.ts punctuation.accessor.ts
115+
^^^
116+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.function-call.ts support.function.dom.ts
117+
^
118+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
119+
^
120+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.begin.ts
121+
^
122+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts
123+
^
124+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.end.ts
125+
^
126+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
127+
^
128+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
129+
^
130+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts keyword.operator.ternary.ts
131+
^
132+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
133+
^^^^^^
134+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.function-call.ts variable.other.object.ts
135+
^
136+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.function-call.ts punctuation.accessor.ts
137+
^^^
138+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.function-call.ts support.function.dom.ts
139+
^
140+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
141+
^
142+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.begin.ts
143+
^
144+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts
145+
^
146+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.end.ts
147+
^
148+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
149+
^
150+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts keyword.operator.logical.ts
151+
^
152+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
153+
^
154+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
155+
^
156+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
157+
^
158+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts keyword.operator.ternary.ts
159+
^
160+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
161+
^
162+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts constant.numeric.decimal.ts
163+
^
164+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.terminator.statement.ts
165+
^^
166+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
167+
> }
168+
^^
169+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
170+
^
171+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
172+
^^
173+
source.ts meta.class.ts
174+
>
175+
^^
176+
source.ts meta.class.ts
177+
> second(): string {
178+
^^
179+
source.ts meta.class.ts
180+
^^^^^^
181+
source.ts meta.class.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
182+
^
183+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
184+
^
185+
source.ts meta.class.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
186+
^
187+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
188+
^
189+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
190+
^^^^^^
191+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts support.type.primitive.ts
192+
^
193+
source.ts meta.class.ts meta.method.declaration.ts meta.return.type.ts
194+
^
195+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
196+
^^
197+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
198+
> return 'foo';
199+
^^^^
200+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
201+
^^^^^^
202+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts keyword.control.flow.ts
203+
^
204+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
205+
^
206+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.begin.ts
207+
^^^
208+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts
209+
^
210+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts string.quoted.single.ts punctuation.definition.string.end.ts
211+
^
212+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.terminator.statement.ts
213+
^^
214+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
215+
> }
216+
^^
217+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts
218+
^
219+
source.ts meta.class.ts meta.method.declaration.ts meta.block.ts punctuation.definition.block.ts
220+
^^
221+
source.ts meta.class.ts
222+
>}
223+
^
224+
source.ts meta.class.ts punctuation.definition.block.ts

tests/cases/Issue453.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
type Resolve = () => number;
2+
3+
class Test {
4+
first(values: Map<string, Resolve>): number {
5+
return values.has('a') ? values.get('a')!() : 0;
6+
}
7+
8+
second(): string {
9+
return 'foo';
10+
}
11+
}

0 commit comments

Comments
 (0)