Skip to content

Commit cd82eb6

Browse files
committed
Fix arrow function determination logic to accomodate => present on next line
Fixes #383
1 parent fcbd570 commit cd82eb6

File tree

5 files changed

+477
-36
lines changed

5 files changed

+477
-36
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ repository:
5656
(function\s*[(<]) |
5757
(function\s+) |
5858
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
59+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
60+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
5961
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
6062
) |
6163
(:\s*(
@@ -544,6 +546,8 @@ repository:
544546
(function\s*[(<]) |
545547
(function\s+) |
546548
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
549+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
550+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
547551
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
548552
) |
549553
(:\s*(
@@ -725,6 +729,8 @@ repository:
725729
(function\s*[(<]) |
726730
(function\s+) |
727731
([_$[:alpha:]][_$[:alnum:]]*\s*=>) |
732+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
733+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
728734
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))
729735
) |
730736
(:\s*(
@@ -1406,6 +1412,8 @@ repository:
14061412
(?x)(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
14071413
(async\s+)|(function\s*[(<])|(function\s+)|
14081414
([_$[:alpha:]][_$[:alnum:]]*\s*=>)|
1415+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1416+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
14091417
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)))
14101418
captures:
14111419
'1': { name: punctuation.accessor.ts }
@@ -1484,6 +1492,8 @@ repository:
14841492
(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
14851493
(async\s+)|(function\s*[(<])|(function\s+)|
14861494
([_$[:alpha:]][_$[:alnum:]]*\s*=>)|
1495+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1496+
([<]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=>])|(\s*[,]))) |
14871497
((<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>))))
14881498
beginCaptures:
14891499
'0': { name: meta.object-literal.key.ts }
@@ -1571,18 +1581,48 @@ repository:
15711581

15721582
arrow-function:
15731583
patterns:
1574-
- name: meta.arrow.ts
1575-
match: (?<!\.|\$)(\basync)(?=\s*[<(])
1576-
captures:
1577-
'1': { name: storage.modifier.async.ts }
1578-
# paramters of the arrow
1584+
# arrow with single parameter without parenthesis
15791585
- name: meta.arrow.ts
15801586
match: (?:(?<!\.|\$)(\basync)\s*)?([_$[:alpha:]][_$[:alnum:]]*)\s*(?==>)
15811587
captures:
15821588
'1': { name: storage.modifier.async.ts }
15831589
'2': { name: variable.parameter.ts }
1590+
# parenthesized arrow
15841591
- name: meta.arrow.ts
1585-
begin: (?x)\s*(?=(<([^<>]|\<[^<>]+\>)+>\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=>)
1592+
begin: >-
1593+
(?x)
1594+
(?:
1595+
(?<!\.|\$)(\basync)(?=\s*[<(])
1596+
) |
1597+
(\s*
1598+
(?=
1599+
# sure shot arrow functions even if => is on new line
1600+
(
1601+
[(]\s*
1602+
(
1603+
([)]\s*:) | # ():
1604+
([_$[:alpha:]][_$[:alnum:]]*\s*:) | # [(]param:
1605+
(\.\.\.) # [(]...
1606+
)
1607+
) |
1608+
(
1609+
[<]\s*[_$[:alpha:]][_$[:alnum:]]*
1610+
(
1611+
(\s+extends\s*[^=>]) | # < typeparam extends
1612+
(\s*[,]) # < typeparam,
1613+
)
1614+
) |
1615+
# arrow function possible to detect only with => on same line
1616+
(
1617+
(<([^<>]|\<[^<>]+\>)+>\s*)? # typeparameters
1618+
\(([^()]|\([^()]*\))*\) # parameteres
1619+
(\s*:\s*(.)*)? # return type
1620+
\s*=> # arrow operator
1621+
)
1622+
)
1623+
)
1624+
beginCaptures:
1625+
'1': { name: storage.modifier.async.ts }
15861626
end: (?==>)
15871627
patterns:
15881628
- include: '#comment'

TypeScript.tmLanguage

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@
152152
(function\s*[(&lt;]) |
153153
(function\s+) |
154154
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
155+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
156+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
155157
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
156158
) |
157159
(:\s*(
@@ -1717,6 +1719,8 @@
17171719
(function\s*[(&lt;]) |
17181720
(function\s+) |
17191721
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
1722+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1723+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
17201724
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
17211725
) |
17221726
(:\s*(
@@ -2260,6 +2264,8 @@
22602264
(function\s*[(&lt;]) |
22612265
(function\s+) |
22622266
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
2267+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
2268+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
22632269
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
22642270
) |
22652271
(:\s*(
@@ -3881,6 +3887,8 @@
38813887
<string>(?x)(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
38823888
(async\s+)|(function\s*[(&lt;])|(function\s+)|
38833889
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)|
3890+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
3891+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
38843892
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)))</string>
38853893
<key>captures</key>
38863894
<dict>
@@ -4089,6 +4097,8 @@
40894097
<string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
40904098
(async\s+)|(function\s*[(&lt;])|(function\s+)|
40914099
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)|
4100+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
4101+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
40924102
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))))</string>
40934103
<key>beginCaptures</key>
40944104
<dict>
@@ -4357,20 +4367,6 @@
43574367
<dict>
43584368
<key>patterns</key>
43594369
<array>
4360-
<dict>
4361-
<key>name</key>
4362-
<string>meta.arrow.ts</string>
4363-
<key>match</key>
4364-
<string>(?&lt;!\.|\$)(\basync)(?=\s*[&lt;(])</string>
4365-
<key>captures</key>
4366-
<dict>
4367-
<key>1</key>
4368-
<dict>
4369-
<key>name</key>
4370-
<string>storage.modifier.async.ts</string>
4371-
</dict>
4372-
</dict>
4373-
</dict>
43744370
<dict>
43754371
<key>name</key>
43764372
<string>meta.arrow.ts</string>
@@ -4394,7 +4390,43 @@
43944390
<key>name</key>
43954391
<string>meta.arrow.ts</string>
43964392
<key>begin</key>
4397-
<string>(?x)\s*(?=(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)</string>
4393+
<string>(?x) (?:
4394+
(?&lt;!\.|\$)(\basync)(?=\s*[&lt;(])
4395+
) | (\s*
4396+
(?=
4397+
# sure shot arrow functions even if =&gt; is on new line
4398+
(
4399+
[(]\s*
4400+
(
4401+
([)]\s*:) | # ():
4402+
([_$[:alpha:]][_$[:alnum:]]*\s*:) | # [(]param:
4403+
(\.\.\.) # [(]...
4404+
)
4405+
) |
4406+
(
4407+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*
4408+
(
4409+
(\s+extends\s*[^=&gt;]) | # &lt; typeparam extends
4410+
(\s*[,]) # &lt; typeparam,
4411+
)
4412+
) |
4413+
# arrow function possible to detect only with =&gt; on same line
4414+
(
4415+
(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)? # typeparameters
4416+
\(([^()]|\([^()]*\))*\) # parameteres
4417+
(\s*:\s*(.)*)? # return type
4418+
\s*=&gt; # arrow operator
4419+
)
4420+
)
4421+
)</string>
4422+
<key>beginCaptures</key>
4423+
<dict>
4424+
<key>1</key>
4425+
<dict>
4426+
<key>name</key>
4427+
<string>storage.modifier.async.ts</string>
4428+
</dict>
4429+
</dict>
43984430
<key>end</key>
43994431
<string>(?==&gt;)</string>
44004432
<key>patterns</key>

TypeScriptReact.tmLanguage

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@
152152
(function\s*[(&lt;]) |
153153
(function\s+) |
154154
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
155+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
156+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
155157
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
156158
) |
157159
(:\s*(
@@ -1721,6 +1723,8 @@
17211723
(function\s*[(&lt;]) |
17221724
(function\s+) |
17231725
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
1726+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
1727+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
17241728
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
17251729
) |
17261730
(:\s*(
@@ -2264,6 +2268,8 @@
22642268
(function\s*[(&lt;]) |
22652269
(function\s+) |
22662270
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;) |
2271+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
2272+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
22672273
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))
22682274
) |
22692275
(:\s*(
@@ -3885,6 +3891,8 @@
38853891
<string>(?x)(?:(\.)\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\s*=\s*(
38863892
(async\s+)|(function\s*[(&lt;])|(function\s+)|
38873893
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)|
3894+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
3895+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
38883896
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)))</string>
38893897
<key>captures</key>
38903898
<dict>
@@ -4071,6 +4079,8 @@
40714079
<string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
40724080
(async\s+)|(function\s*[(&lt;])|(function\s+)|
40734081
([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)|
4082+
([(]\s*(([)]\s*:)|([_$[:alpha:]][_$[:alnum:]]*\s*:)|(\.\.\.) )) |
4083+
([&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s*[^=&gt;])|(\s*[,]))) |
40744084
((&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;))))</string>
40754085
<key>beginCaptures</key>
40764086
<dict>
@@ -4339,20 +4349,6 @@
43394349
<dict>
43404350
<key>patterns</key>
43414351
<array>
4342-
<dict>
4343-
<key>name</key>
4344-
<string>meta.arrow.tsx</string>
4345-
<key>match</key>
4346-
<string>(?&lt;!\.|\$)(\basync)(?=\s*[&lt;(])</string>
4347-
<key>captures</key>
4348-
<dict>
4349-
<key>1</key>
4350-
<dict>
4351-
<key>name</key>
4352-
<string>storage.modifier.async.tsx</string>
4353-
</dict>
4354-
</dict>
4355-
</dict>
43564352
<dict>
43574353
<key>name</key>
43584354
<string>meta.arrow.tsx</string>
@@ -4376,7 +4372,43 @@
43764372
<key>name</key>
43774373
<string>meta.arrow.tsx</string>
43784374
<key>begin</key>
4379-
<string>(?x)\s*(?=(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)?\(([^()]|\([^()]*\))*\)(\s*:\s*(.)*)?\s*=&gt;)</string>
4375+
<string>(?x) (?:
4376+
(?&lt;!\.|\$)(\basync)(?=\s*[&lt;(])
4377+
) | (\s*
4378+
(?=
4379+
# sure shot arrow functions even if =&gt; is on new line
4380+
(
4381+
[(]\s*
4382+
(
4383+
([)]\s*:) | # ():
4384+
([_$[:alpha:]][_$[:alnum:]]*\s*:) | # [(]param:
4385+
(\.\.\.) # [(]...
4386+
)
4387+
) |
4388+
(
4389+
[&lt;]\s*[_$[:alpha:]][_$[:alnum:]]*
4390+
(
4391+
(\s+extends\s*[^=&gt;]) | # &lt; typeparam extends
4392+
(\s*[,]) # &lt; typeparam,
4393+
)
4394+
) |
4395+
# arrow function possible to detect only with =&gt; on same line
4396+
(
4397+
(&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+&gt;\s*)? # typeparameters
4398+
\(([^()]|\([^()]*\))*\) # parameteres
4399+
(\s*:\s*(.)*)? # return type
4400+
\s*=&gt; # arrow operator
4401+
)
4402+
)
4403+
)</string>
4404+
<key>beginCaptures</key>
4405+
<dict>
4406+
<key>1</key>
4407+
<dict>
4408+
<key>name</key>
4409+
<string>storage.modifier.async.tsx</string>
4410+
</dict>
4411+
</dict>
43804412
<key>end</key>
43814413
<string>(?==&gt;)</string>
43824414
<key>patterns</key>

0 commit comments

Comments
 (0)