Skip to content

Commit 51323af

Browse files
committed
Ignore typeannotation when matching functionorarrow assignment
Fixes #556
1 parent 53d555b commit 51323af

File tree

5 files changed

+262
-1
lines changed

5 files changed

+262
-1
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ variables:
8080
([)]\s*=>)
8181
))
8282
))
83-
))
83+
)) |
84+
(:\s*(=>|{{matchingParenthesis}}|(<[^<>]*>)|[^<>(),=])+={{functionOrArrowLookup}})
8485
8586
patterns:
8687
- include: '#directives'

TypeScript.tmLanguage

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,33 @@
445445
([)]\s*=&gt;)
446446
))
447447
))
448+
)) |
449+
(:\s*(=&gt;|(\([^\(\)]*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
450+
((async\s+)?(
451+
(function\s*[(&lt;*]) |
452+
(function\s+) |
453+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
454+
)) |
455+
((async\s*)?(
456+
# sure shot arrow functions even if =&gt; is on new line
457+
(
458+
[(]\s*
459+
(
460+
([)]\s*:) | # ():
461+
((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
462+
)
463+
) |
464+
(
465+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
466+
) |
467+
# arrow function possible to detect only with =&gt; on same line
468+
(
469+
(&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)? # typeparameters
470+
\(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres
471+
(\s*:\s*([^&lt;&gt;\(\)]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\))+)? # return type
472+
\s*=&gt; # arrow operator
473+
)
474+
))
448475
)))</string>
449476
<key>beginCaptures</key>
450477
<dict>
@@ -833,6 +860,33 @@
833860
([)]\s*=&gt;)
834861
))
835862
))
863+
)) |
864+
(:\s*(=&gt;|(\([^\(\)]*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
865+
((async\s+)?(
866+
(function\s*[(&lt;*]) |
867+
(function\s+) |
868+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
869+
)) |
870+
((async\s*)?(
871+
# sure shot arrow functions even if =&gt; is on new line
872+
(
873+
[(]\s*
874+
(
875+
([)]\s*:) | # ():
876+
((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
877+
)
878+
) |
879+
(
880+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
881+
) |
882+
# arrow function possible to detect only with =&gt; on same line
883+
(
884+
(&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)? # typeparameters
885+
\(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres
886+
(\s*:\s*([^&lt;&gt;\(\)]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\))+)? # return type
887+
\s*=&gt; # arrow operator
888+
)
889+
))
836890
)))</string>
837891
<key>captures</key>
838892
<dict>
@@ -1219,6 +1273,33 @@
12191273
([)]\s*=&gt;)
12201274
))
12211275
))
1276+
)) |
1277+
(:\s*(=&gt;|(\([^\(\)]*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
1278+
((async\s+)?(
1279+
(function\s*[(&lt;*]) |
1280+
(function\s+) |
1281+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1282+
)) |
1283+
((async\s*)?(
1284+
# sure shot arrow functions even if =&gt; is on new line
1285+
(
1286+
[(]\s*
1287+
(
1288+
([)]\s*:) | # ():
1289+
((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1290+
)
1291+
) |
1292+
(
1293+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
1294+
) |
1295+
# arrow function possible to detect only with =&gt; on same line
1296+
(
1297+
(&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)? # typeparameters
1298+
\(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres
1299+
(\s*:\s*([^&lt;&gt;\(\)]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\))+)? # return type
1300+
\s*=&gt; # arrow operator
1301+
)
1302+
))
12221303
)))</string>
12231304
</dict>
12241305
<dict>

TypeScriptReact.tmLanguage

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,33 @@
449449
([)]\s*=&gt;)
450450
))
451451
))
452+
)) |
453+
(:\s*(=&gt;|(\([^\(\)]*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
454+
((async\s+)?(
455+
(function\s*[(&lt;*]) |
456+
(function\s+) |
457+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
458+
)) |
459+
((async\s*)?(
460+
# sure shot arrow functions even if =&gt; is on new line
461+
(
462+
[(]\s*
463+
(
464+
([)]\s*:) | # ():
465+
((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
466+
)
467+
) |
468+
(
469+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
470+
) |
471+
# arrow function possible to detect only with =&gt; on same line
472+
(
473+
(&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)? # typeparameters
474+
\(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres
475+
(\s*:\s*([^&lt;&gt;\(\)]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\))+)? # return type
476+
\s*=&gt; # arrow operator
477+
)
478+
))
452479
)))</string>
453480
<key>beginCaptures</key>
454481
<dict>
@@ -837,6 +864,33 @@
837864
([)]\s*=&gt;)
838865
))
839866
))
867+
)) |
868+
(:\s*(=&gt;|(\([^\(\)]*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
869+
((async\s+)?(
870+
(function\s*[(&lt;*]) |
871+
(function\s+) |
872+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
873+
)) |
874+
((async\s*)?(
875+
# sure shot arrow functions even if =&gt; is on new line
876+
(
877+
[(]\s*
878+
(
879+
([)]\s*:) | # ():
880+
((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
881+
)
882+
) |
883+
(
884+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
885+
) |
886+
# arrow function possible to detect only with =&gt; on same line
887+
(
888+
(&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)? # typeparameters
889+
\(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres
890+
(\s*:\s*([^&lt;&gt;\(\)]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\))+)? # return type
891+
\s*=&gt; # arrow operator
892+
)
893+
))
840894
)))</string>
841895
<key>captures</key>
842896
<dict>
@@ -1223,6 +1277,33 @@
12231277
([)]\s*=&gt;)
12241278
))
12251279
))
1280+
)) |
1281+
(:\s*(=&gt;|(\([^\(\)]*\))|(&lt;[^&lt;&gt;]*&gt;)|[^&lt;&gt;(),=])+=\s*(
1282+
((async\s+)?(
1283+
(function\s*[(&lt;*]) |
1284+
(function\s+) |
1285+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1286+
)) |
1287+
((async\s*)?(
1288+
# sure shot arrow functions even if =&gt; is on new line
1289+
(
1290+
[(]\s*
1291+
(
1292+
([)]\s*:) | # ():
1293+
((\.\.\.\s*)?[_$[:alpha:]][_$[:alnum:]]*\s*:) # [(]param: | [(]...param:
1294+
)
1295+
) |
1296+
(
1297+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*\s+extends\s*[^=&gt;] # &lt; typeparam extends
1298+
) |
1299+
# arrow function possible to detect only with =&gt; on same line
1300+
(
1301+
(&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{[^\{\}]*\})|(\([^\(\)]*\))|(\[[^\[\]]*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)? # typeparameters
1302+
\(\s*([_$[:alpha:]\{\[]([^()]|\((\s*[^()]*)?\))*)?\) # parameteres
1303+
(\s*:\s*([^&lt;&gt;\(\)]|\&lt;[^&lt;&gt;]+\&gt;|\([^\(\)]+\))+)? # return type
1304+
\s*=&gt; # arrow operator
1305+
)
1306+
))
12261307
)))</string>
12271308
</dict>
12281309
<dict>

tests/baselines/Issue556.baseline.txt

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
original file
2+
-----------------------------------
3+
class Thing {
4+
foo: SomeFunc = () => void 0;
5+
bar = () => void 0;
6+
}
7+
-----------------------------------
8+
9+
Grammar: TypeScript.tmLanguage
10+
-----------------------------------
11+
>class Thing {
12+
^^^^^
13+
source.ts meta.class.ts storage.type.class.ts
14+
^
15+
source.ts meta.class.ts
16+
^^^^^
17+
source.ts meta.class.ts entity.name.type.class.ts
18+
^
19+
source.ts meta.class.ts
20+
^
21+
source.ts meta.class.ts punctuation.definition.block.ts
22+
^^
23+
source.ts meta.class.ts
24+
> foo: SomeFunc = () => void 0;
25+
^^^^
26+
source.ts meta.class.ts
27+
^^^
28+
source.ts meta.class.ts meta.field.declaration.ts meta.definition.property.ts entity.name.function.ts
29+
^
30+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
31+
^
32+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts
33+
^^^^^^^^
34+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts entity.name.type.ts
35+
^
36+
source.ts meta.class.ts meta.field.declaration.ts meta.type.annotation.ts
37+
^
38+
source.ts meta.class.ts meta.field.declaration.ts keyword.operator.assignment.ts
39+
^
40+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
41+
^
42+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
43+
^
44+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
45+
^
46+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
47+
^^
48+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts storage.type.function.arrow.ts
49+
^
50+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
51+
^^^^
52+
source.ts meta.class.ts meta.field.declaration.ts keyword.operator.expression.void.ts
53+
^
54+
source.ts meta.class.ts meta.field.declaration.ts
55+
^
56+
source.ts meta.class.ts meta.field.declaration.ts constant.numeric.decimal.ts
57+
^
58+
source.ts meta.class.ts punctuation.terminator.statement.ts
59+
^^
60+
source.ts meta.class.ts
61+
> bar = () => void 0;
62+
^^^^
63+
source.ts meta.class.ts
64+
^^^
65+
source.ts meta.class.ts meta.field.declaration.ts meta.definition.property.ts entity.name.function.ts
66+
^
67+
source.ts meta.class.ts meta.field.declaration.ts
68+
^
69+
source.ts meta.class.ts meta.field.declaration.ts keyword.operator.assignment.ts
70+
^
71+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
72+
^
73+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
74+
^
75+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
76+
^
77+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
78+
^^
79+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts storage.type.function.arrow.ts
80+
^
81+
source.ts meta.class.ts meta.field.declaration.ts meta.arrow.ts
82+
^^^^
83+
source.ts meta.class.ts meta.field.declaration.ts keyword.operator.expression.void.ts
84+
^
85+
source.ts meta.class.ts meta.field.declaration.ts
86+
^
87+
source.ts meta.class.ts meta.field.declaration.ts constant.numeric.decimal.ts
88+
^
89+
source.ts meta.class.ts punctuation.terminator.statement.ts
90+
^^
91+
source.ts meta.class.ts
92+
>}
93+
^
94+
source.ts meta.class.ts punctuation.definition.block.ts

tests/cases/Issue556.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Thing {
2+
foo: SomeFunc = () => void 0;
3+
bar = () => void 0;
4+
}

0 commit comments

Comments
 (0)