Skip to content

Commit 53376c9

Browse files
committed
Dont treat async on its own as arrow/function expression start
Fixes #441
1 parent 0d2bd8f commit 53376c9

File tree

5 files changed

+222
-129
lines changed

5 files changed

+222
-129
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 64 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,17 @@ repository:
5151
begin: |-
5252
(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
5353
(=\s*(
54-
(async\s+) |
55-
(function\s*[(<]) |
56-
(function\s+) |
57-
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
58-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
59-
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
60-
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
61-
) |
54+
((async\s+)?(
55+
(function\s*[(<]) |
56+
(function\s+) |
57+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
58+
)) |
59+
((async\s*)?(
60+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
61+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
62+
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
63+
))
64+
)) |
6265
(:\s*(
6366
(<) |
6467
([(]\s*(
@@ -68,8 +71,8 @@ repository:
6871
([:,?=])|
6972
([)]\s*=>)
7073
))
71-
)))
72-
)
74+
))
75+
))
7376
)
7477
beginCaptures:
7578
'1': { name: meta.definition.variable.ts entity.name.function.ts }
@@ -537,14 +540,17 @@ repository:
537540
match: |-
538541
(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\?\s*)?\s*
539542
(=\s*(
540-
(async\s+) |
541-
(function\s*[(<]) |
542-
(function\s+) |
543-
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
544-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
545-
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
546-
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
547-
) |
543+
((async\s+)?(
544+
(function\s*[(<]) |
545+
(function\s+) |
546+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
547+
)) |
548+
((async\s*)?(
549+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
550+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
551+
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
552+
))
553+
)) |
548554
(:\s*(
549555
(<) |
550556
([(]\s*(
@@ -554,8 +560,8 @@ repository:
554560
([:,?=])|
555561
([)]\s*=>)
556562
))
557-
)))
558-
)
563+
))
564+
))
559565
)
560566
- name: meta.definition.property.ts variable.object.property.ts
561567
match: '[_$[:alpha:]][_$[:alnum:]]*'
@@ -725,14 +731,17 @@ repository:
725731
- match: |-
726732
(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?<!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
727733
(=\s*(
728-
(async\s+) |
729-
(function\s*[(<]) |
730-
(function\s+) |
731-
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
732-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
733-
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
734-
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
735-
) |
734+
((async\s+)?(
735+
(function\s*[(<]) |
736+
(function\s+) |
737+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
738+
)) |
739+
((async\s*)?(
740+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
741+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
742+
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
743+
))
744+
)) |
736745
(:\s*(
737746
(<) |
738747
([(]\s*(
@@ -742,8 +751,8 @@ repository:
742751
([:,?=])|
743752
([)]\s*=>)
744753
))
745-
)))
746-
)
754+
))
755+
))
747756
)
748757
captures:
749758
'1': { name: storage.modifier.ts }
@@ -1396,11 +1405,17 @@ repository:
13961405
# function and method assignment
13971406
- match: |-
13981407
(?x)(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
1399-
(async\s+)|(function\s*[(<])|(function\s+)|
1400-
([_$[:alpha:]][_$[:alnum:]]*\s*=>)|
1401-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1402-
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
1403-
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)))
1408+
((async\s+)?(
1409+
(function\s*[(<]) |
1410+
(function\s+) |
1411+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1412+
)) |
1413+
((async\s*)?(
1414+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1415+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
1416+
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
1417+
))
1418+
))
14041419
captures:
14051420
'1': { name: punctuation.accessor.ts }
14061421
'2': { name: entity.name.function.ts }
@@ -1515,11 +1530,17 @@ repository:
15151530
- name: meta.object.member.ts
15161531
begin: |-
15171532
(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
1518-
(async\s+)|(function\s*[(<])|(function\s+)|
1519-
([_$[:alpha:]][_$[:alnum:]]*\s*=>)|
1520-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1521-
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
1522-
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))))
1533+
((async\s+)?(
1534+
(function\s*[(<]) |
1535+
(function\s+) |
1536+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)
1537+
)) |
1538+
((async\s*)?(
1539+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1540+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
1541+
((<([^<>=]|=[^<]|\<([^=<>]|=[^<])+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
1542+
))
1543+
)))
15231544
beginCaptures:
15241545
'0': { name: meta.object-literal.key.ts }
15251546
'1': { name: entity.name.function.ts }
@@ -1613,7 +1634,7 @@ repository:
16131634
patterns:
16141635
# arrow with single parameter without parenthesis
16151636
- name: meta.arrow.ts
1616-
match: (?:(?<!\.|\$)(\basync)\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==>)
1637+
match: (?:(?<!\.|\$)(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==>)
16171638
captures:
16181639
'1': { name: storage.modifier.async.ts }
16191640
'2': { name: variable.parameter.ts }
@@ -1622,8 +1643,8 @@ repository:
16221643
begin: >-
16231644
(?x)
16241645
(?:
1625-
(?<!\.|\$)(\basync)(?=\s*[<(])
1626-
) |
1646+
(?<!\.|\$)(\basync)
1647+
)?
16271648
((?<![})\]])\s*
16281649
(?=
16291650
# sure shot arrow functions even if => is on new line

TypeScript.tmLanguage

Lines changed: 64 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,17 @@
144144
<key>begin</key>
145145
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\s*
146146
(=\s*(
147-
(async\s+) |
148-
(function\s*[(&lt;]) |
149-
(function\s+) |
150-
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
151-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
152-
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
153-
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
154-
) |
147+
((async\s+)?(
148+
(function\s*[(&lt;]) |
149+
(function\s+) |
150+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
151+
)) |
152+
((async\s*)?(
153+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
154+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
155+
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
156+
))
157+
)) |
155158
(:\s*(
156159
(&lt;) |
157160
([(]\s*(
@@ -161,8 +164,8 @@
161164
([:,?=])|
162165
([)]\s*=&gt;)
163166
))
164-
)))
165-
)
167+
))
168+
))
166169
)</string>
167170
<key>beginCaptures</key>
168171
<dict>
@@ -1693,14 +1696,17 @@
16931696
<key>match</key>
16941697
<string>(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=(\?\s*)?\s*
16951698
(=\s*(
1696-
(async\s+) |
1697-
(function\s*[(&lt;]) |
1698-
(function\s+) |
1699-
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
1700-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1701-
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
1702-
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
1703-
) |
1699+
((async\s+)?(
1700+
(function\s*[(&lt;]) |
1701+
(function\s+) |
1702+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
1703+
)) |
1704+
((async\s*)?(
1705+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1706+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
1707+
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
1708+
))
1709+
)) |
17041710
(:\s*(
17051711
(&lt;) |
17061712
([(]\s*(
@@ -1710,8 +1716,8 @@
17101716
([:,?=])|
17111717
([)]\s*=&gt;)
17121718
))
1713-
)))
1714-
)
1719+
))
1720+
))
17151721
)</string>
17161722
</dict>
17171723
<dict>
@@ -2254,14 +2260,17 @@
22542260
<key>match</key>
22552261
<string>(?x)(?:\s*\b(public|private|protected|readonly)\s+)?(\.\.\.)?\s*(?&lt;!=|:)([_$[:alpha:]][_$[:alnum:]]*)\s*(\??)(?=\s*
22562262
(=\s*(
2257-
(async\s+) |
2258-
(function\s*[(&lt;]) |
2259-
(function\s+) |
2260-
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
2261-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
2262-
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
2263-
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
2264-
) |
2263+
((async\s+)?(
2264+
(function\s*[(&lt;]) |
2265+
(function\s+) |
2266+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
2267+
)) |
2268+
((async\s*)?(
2269+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
2270+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
2271+
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
2272+
))
2273+
)) |
22652274
(:\s*(
22662275
(&lt;) |
22672276
([(]\s*(
@@ -2271,8 +2280,8 @@
22712280
([:,?=])|
22722281
([)]\s*=&gt;)
22732282
))
2274-
)))
2275-
)
2283+
))
2284+
))
22762285
)</string>
22772286
<key>captures</key>
22782287
<dict>
@@ -3846,11 +3855,17 @@
38463855
<dict>
38473856
<key>match</key>
38483857
<string>(?x)(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
3849-
(async\s+)|(function\s*[(&lt;])|(function\s+)|
3850-
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)|
3851-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
3852-
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
3853-
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)))</string>
3858+
((async\s+)?(
3859+
(function\s*[(&lt;]) |
3860+
(function\s+) |
3861+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
3862+
)) |
3863+
((async\s*)?(
3864+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
3865+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
3866+
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
3867+
))
3868+
))</string>
38543869
<key>captures</key>
38553870
<dict>
38563871
<key>1</key>
@@ -4162,11 +4177,17 @@
41624177
<string>meta.object.member.ts</string>
41634178
<key>begin</key>
41644179
<string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
4165-
(async\s+)|(function\s*[(&lt;])|(function\s+)|
4166-
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)|
4167-
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
4168-
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
4169-
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))))</string>
4180+
((async\s+)?(
4181+
(function\s*[(&lt;]) |
4182+
(function\s+) |
4183+
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)
4184+
)) |
4185+
((async\s*)?(
4186+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
4187+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
4188+
((&lt;([^&lt;&gt;=]|=[^&lt;]|\&lt;([^=&lt;&gt;]|=[^&lt;])+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)
4189+
))
4190+
)))</string>
41704191
<key>beginCaptures</key>
41714192
<dict>
41724193
<key>0</key>
@@ -4455,7 +4476,7 @@
44554476
<key>name</key>
44564477
<string>meta.arrow.ts</string>
44574478
<key>match</key>
4458-
<string>(?:(?&lt;!\.|\$)(\basync)\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==&gt;)</string>
4479+
<string>(?:(?&lt;!\.|\$)(\basync)\s+)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==&gt;)</string>
44594480
<key>captures</key>
44604481
<dict>
44614482
<key>1</key>
@@ -4475,8 +4496,8 @@
44754496
<string>meta.arrow.ts</string>
44764497
<key>begin</key>
44774498
<string>(?x) (?:
4478-
(?&lt;!\.|\$)(\basync)(?=\s*[&lt;(])
4479-
) | ((?&lt;![})\]])\s*
4499+
(?&lt;!\.|\$)(\basync)
4500+
)? ((?&lt;![})\]])\s*
44804501
(?=
44814502
# sure shot arrow functions even if =&gt; is on new line
44824503
(

0 commit comments

Comments
 (0)