Skip to content

Commit 16c5fcb

Browse files
committed
Fix return type on new line of arrow function
Fixes #677
1 parent 7a682de commit 16c5fcb

File tree

5 files changed

+306
-3
lines changed

5 files changed

+306
-3
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,7 @@ repository:
783783
- include: '#function-parameters'
784784
# return type of the arrow
785785
- include: '#arrow-return-type'
786+
- include: '#possibly-arrow-return-type'
786787
# arrow operator
787788
- name: meta.arrow.ts
788789
begin: =>
@@ -2033,7 +2034,7 @@ repository:
20332034

20342035
#This is the check if the exoression '): something =>'' can be matched as return type of arrow
20352036
possibly-arrow-return-type:
2036-
begin: (?<=\))\s*(:)(?={{returnTypeOfArrow}}\s*=>)
2037+
begin: (?<=\)|^)\s*(:)(?={{returnTypeOfArrow}}\s*=>)
20372038
beginCaptures:
20382039
'1': { name: meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts }
20392040
end: '{{arrowFunctionEnd}}'

TypeScript.tmLanguage

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2510,6 +2510,10 @@
25102510
<key>include</key>
25112511
<string>#arrow-return-type</string>
25122512
</dict>
2513+
<dict>
2514+
<key>include</key>
2515+
<string>#possibly-arrow-return-type</string>
2516+
</dict>
25132517
</array>
25142518
</dict>
25152519
<dict>
@@ -6037,7 +6041,7 @@
60376041
<key>possibly-arrow-return-type</key>
60386042
<dict>
60396043
<key>begin</key>
6040-
<string>(?&lt;=\))\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
6044+
<string>(?&lt;=\)|^)\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
60416045
<key>beginCaptures</key>
60426046
<dict>
60436047
<key>1</key>

TypeScriptReact.tmLanguage

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2514,6 +2514,10 @@
25142514
<key>include</key>
25152515
<string>#arrow-return-type</string>
25162516
</dict>
2517+
<dict>
2518+
<key>include</key>
2519+
<string>#possibly-arrow-return-type</string>
2520+
</dict>
25172521
</array>
25182522
</dict>
25192523
<dict>
@@ -5983,7 +5987,7 @@
59835987
<key>possibly-arrow-return-type</key>
59845988
<dict>
59855989
<key>begin</key>
5986-
<string>(?&lt;=\))\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
5990+
<string>(?&lt;=\)|^)\s*(:)(?=\s*([^&lt;&gt;\(\)\{\}]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*=&gt;)</string>
59875991
<key>beginCaptures</key>
59885992
<dict>
59895993
<key>1</key>
Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
original file
2+
-----------------------------------
3+
const func2 = (url: string)
4+
: Promise<any> => {
5+
return new Promise((accept, reject) => {
6+
const text = window.prompt();
7+
accept(text);
8+
});
9+
}
10+
const func2a = (url)
11+
: Promise<any> => {
12+
return new Promise((accept, reject) => {
13+
const text = window.prompt();
14+
accept(text);
15+
});
16+
}
17+
-----------------------------------
18+
19+
Grammar: TypeScript.tmLanguage
20+
-----------------------------------
21+
>const func2 = (url: string)
22+
^^^^^
23+
source.ts meta.var.expr.ts storage.type.ts
24+
^^
25+
source.ts meta.var.expr.ts
26+
^^^^^
27+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts
28+
^
29+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
30+
^
31+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
32+
^
33+
source.ts meta.var.expr.ts meta.arrow.ts
34+
^
35+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
36+
^^^
37+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
38+
^
39+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
40+
^
41+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts
42+
^^^^^^
43+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
44+
^
45+
source.ts meta.var.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
46+
>: Promise<any> => {
47+
^
48+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
49+
^
50+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts
51+
^^^^^^^
52+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts entity.name.type.ts
53+
^
54+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
55+
^^^
56+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts meta.type.parameters.ts support.type.primitive.ts
57+
^
58+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
59+
^
60+
source.ts meta.var.expr.ts meta.arrow.ts meta.arrow.ts meta.return.type.arrow.ts
61+
^^
62+
source.ts meta.var.expr.ts meta.arrow.ts storage.type.function.arrow.ts
63+
^
64+
source.ts meta.var.expr.ts meta.arrow.ts
65+
^
66+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
67+
> return new Promise((accept, reject) => {
68+
^^^^
69+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
70+
^^^^^^
71+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.control.flow.ts
72+
^
73+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
74+
^^^
75+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts keyword.operator.new.ts
76+
^
77+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts
78+
^^^^^^^
79+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts entity.name.type.ts
80+
^
81+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.brace.round.ts
82+
^
83+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
84+
^^^^^^
85+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
86+
^
87+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts punctuation.separator.parameter.ts
88+
^
89+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts
90+
^^^^^^
91+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
92+
^
93+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
94+
^
95+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts
96+
^^
97+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts storage.type.function.arrow.ts
98+
^
99+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts
100+
^
101+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
102+
> const text = window.prompt();
103+
^^^^^^^^
104+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts
105+
^^^^^
106+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
107+
^
108+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
109+
^^^^
110+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.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
111+
^
112+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
113+
^
114+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
115+
^
116+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
117+
^^^^^^
118+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.function-call.ts support.variable.dom.ts
119+
^
120+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.function-call.ts punctuation.accessor.ts
121+
^^^^^^
122+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.function-call.ts support.function.ts
123+
^
124+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.brace.round.ts
125+
^
126+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.brace.round.ts
127+
^
128+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
129+
> accept(text);
130+
^^^^^^^^
131+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts
132+
^^^^^^
133+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.function-call.ts entity.name.function.ts
134+
^
135+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
136+
^^^^
137+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts variable.other.readwrite.ts
138+
^
139+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
140+
^
141+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
142+
> });
143+
^^^^
144+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts
145+
^
146+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
147+
^
148+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts new.expr.ts meta.brace.round.ts
149+
^
150+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
151+
>}
152+
^
153+
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
154+
>const func2a = (url)
155+
^^^^^
156+
source.ts meta.var.expr.ts storage.type.ts
157+
^^
158+
source.ts meta.var.expr.ts
159+
^^^^^^
160+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
161+
^
162+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
163+
^
164+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
165+
^
166+
source.ts meta.var.expr.ts
167+
^
168+
source.ts meta.var.expr.ts meta.brace.round.ts
169+
^^^
170+
source.ts meta.var.expr.ts variable.other.readwrite.ts
171+
^
172+
source.ts meta.var.expr.ts meta.brace.round.ts
173+
>: Promise<any> => {
174+
^
175+
source.ts meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts
176+
^
177+
source.ts meta.arrow.ts meta.return.type.arrow.ts
178+
^^^^^^^
179+
source.ts meta.arrow.ts meta.return.type.arrow.ts entity.name.type.ts
180+
^
181+
source.ts meta.arrow.ts meta.return.type.arrow.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
182+
^^^
183+
source.ts meta.arrow.ts meta.return.type.arrow.ts meta.type.parameters.ts support.type.primitive.ts
184+
^
185+
source.ts meta.arrow.ts meta.return.type.arrow.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
186+
^
187+
source.ts meta.arrow.ts meta.return.type.arrow.ts
188+
^^
189+
source.ts meta.arrow.ts storage.type.function.arrow.ts
190+
^
191+
source.ts meta.arrow.ts
192+
^
193+
source.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
194+
> return new Promise((accept, reject) => {
195+
^^^^
196+
source.ts meta.arrow.ts meta.block.ts
197+
^^^^^^
198+
source.ts meta.arrow.ts meta.block.ts keyword.control.flow.ts
199+
^
200+
source.ts meta.arrow.ts meta.block.ts
201+
^^^
202+
source.ts meta.arrow.ts meta.block.ts new.expr.ts keyword.operator.new.ts
203+
^
204+
source.ts meta.arrow.ts meta.block.ts new.expr.ts
205+
^^^^^^^
206+
source.ts meta.arrow.ts meta.block.ts new.expr.ts entity.name.type.ts
207+
^
208+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.brace.round.ts
209+
^
210+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
211+
^^^^^^
212+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
213+
^
214+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts punctuation.separator.parameter.ts
215+
^
216+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts
217+
^^^^^^
218+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
219+
^
220+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
221+
^
222+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts
223+
^^
224+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts storage.type.function.arrow.ts
225+
^
226+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts
227+
^
228+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
229+
> const text = window.prompt();
230+
^^^^^^^^
231+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts
232+
^^^^^
233+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
234+
^
235+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
236+
^^^^
237+
source.ts meta.arrow.ts meta.block.ts new.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
238+
^
239+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
240+
^
241+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
242+
^
243+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
244+
^^^^^^
245+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.function-call.ts support.variable.dom.ts
246+
^
247+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.function-call.ts punctuation.accessor.ts
248+
^^^^^^
249+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.function-call.ts support.function.ts
250+
^
251+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.brace.round.ts
252+
^
253+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts meta.brace.round.ts
254+
^
255+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
256+
> accept(text);
257+
^^^^^^^^
258+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts
259+
^^^^^^
260+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.function-call.ts entity.name.function.ts
261+
^
262+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
263+
^^^^
264+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts variable.other.readwrite.ts
265+
^
266+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts meta.brace.round.ts
267+
^
268+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
269+
> });
270+
^^^^
271+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts
272+
^
273+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
274+
^
275+
source.ts meta.arrow.ts meta.block.ts new.expr.ts meta.brace.round.ts
276+
^
277+
source.ts meta.arrow.ts meta.block.ts punctuation.terminator.statement.ts
278+
>}
279+
^
280+
source.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts

tests/cases/Issue677arrow.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const func2 = (url: string)
2+
: Promise<any> => {
3+
return new Promise((accept, reject) => {
4+
const text = window.prompt();
5+
accept(text);
6+
});
7+
}
8+
const func2a = (url)
9+
: Promise<any> => {
10+
return new Promise((accept, reject) => {
11+
const text = window.prompt();
12+
accept(text);
13+
});
14+
}

0 commit comments

Comments
 (0)