Skip to content

Commit 0c8c091

Browse files
committed
Restrict multiline arrow detection to only few tokens
1 parent a7fa5b5 commit 0c8c091

11 files changed

+655
-108
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ variables:
3030
matchingBraces: (\{([^\{\}]|(\{[^\{\}]*\}))*\})
3131
matchingBrackets: (\[([^\[\]]|(\[[^\[\]]*\]))*\])
3232
inlineComment: \/\*([^\*]|(\*[^\/]))*\*\/
33+
lookBehindOfPossiblyMultilineArrow: (?<=[(=,]|=>)
3334
# Identifier start | matching braces | matching parenthesis | matching square brackets
3435
typeParamersStart: ([_$[:alpha:]]|{{matchingBraces}}|{{matchingParenthesis}}|{{matchingBrackets}})
3536
typeParameters: (<\s*{{typeParamersStart}}([^=<>]|=[^<]|\<\s*{{typeParamersStart}}([^=<>]|=[^<])*\>)*>\s*)
@@ -1155,26 +1156,38 @@ repository:
11551156
# but do this only from expression and as last resort
11561157
paren-expression-possibly-arrow:
11571158
patterns:
1158-
- begin: (?:{{startOfIdentifier}}(\basync))?(?=\s*{{typeParameters}}\(\s*$)
1159+
- begin: '{{lookBehindOfPossiblyMultilineArrow}}\s*(async)?(?=\s*{{typeParameters}}\(\s*$)'
11591160
beginCaptures:
11601161
'1': { name: storage.modifier.async.ts }
1161-
end: (?<=>)(?!<)
1162+
end: (?<=\))
11621163
patterns:
11631164
- include: '#type-parameters'
1164-
- begin: (?:{{startOfIdentifier}}(\basync)\s*)?(\()(?=\s*$)
1165+
- begin: \(
1166+
beginCaptures:
1167+
'0': { name: meta.brace.round.ts }
1168+
end: \)
1169+
endCaptures:
1170+
'0': { name: meta.brace.round.ts }
1171+
patterns:
1172+
- include: '#expression-inside-possibly-arrow-parens'
1173+
- begin: '{{lookBehindOfPossiblyMultilineArrow}}\s*(async)?\s*(\()(?=\s*$)'
11651174
beginCaptures:
11661175
'1': { name: storage.modifier.async.ts }
11671176
'2': { name: meta.brace.round.ts }
11681177
end: \)
11691178
endCaptures:
11701179
'0': { name: meta.brace.round.ts }
11711180
patterns:
1172-
- include: '#expressionWithoutIdentifiers'
1173-
- include: '#function-parameters-body'
1174-
- include: '#identifiers'
1175-
- include: '#expressionPunctuations'
1181+
- include: '#expression-inside-possibly-arrow-parens'
11761182
- include: '#possibly-arrow-return-type'
11771183

1184+
expression-inside-possibly-arrow-parens:
1185+
patterns:
1186+
- include: '#expressionWithoutIdentifiers'
1187+
- include: '#function-parameters-body'
1188+
- include: '#identifiers'
1189+
- include: '#expressionPunctuations'
1190+
11781191
paren-expression:
11791192
begin: \(
11801193
beginCaptures:

TypeScript.tmLanguage

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3602,7 +3602,7 @@
36023602
<array>
36033603
<dict>
36043604
<key>begin</key>
3605-
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync))?(?=\s*(&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)\(\s*$)</string>
3605+
<string>(?&lt;=[(=,]|=&gt;)\s*(async)?(?=\s*(&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)\(\s*$)</string>
36063606
<key>beginCaptures</key>
36073607
<dict>
36083608
<key>1</key>
@@ -3612,18 +3612,47 @@
36123612
</dict>
36133613
</dict>
36143614
<key>end</key>
3615-
<string>(?&lt;=&gt;)(?!&lt;)</string>
3615+
<string>(?&lt;=\))</string>
36163616
<key>patterns</key>
36173617
<array>
36183618
<dict>
36193619
<key>include</key>
36203620
<string>#type-parameters</string>
36213621
</dict>
3622+
<dict>
3623+
<key>begin</key>
3624+
<string>\(</string>
3625+
<key>beginCaptures</key>
3626+
<dict>
3627+
<key>0</key>
3628+
<dict>
3629+
<key>name</key>
3630+
<string>meta.brace.round.ts</string>
3631+
</dict>
3632+
</dict>
3633+
<key>end</key>
3634+
<string>\)</string>
3635+
<key>endCaptures</key>
3636+
<dict>
3637+
<key>0</key>
3638+
<dict>
3639+
<key>name</key>
3640+
<string>meta.brace.round.ts</string>
3641+
</dict>
3642+
</dict>
3643+
<key>patterns</key>
3644+
<array>
3645+
<dict>
3646+
<key>include</key>
3647+
<string>#expression-inside-possibly-arrow-parens</string>
3648+
</dict>
3649+
</array>
3650+
</dict>
36223651
</array>
36233652
</dict>
36243653
<dict>
36253654
<key>begin</key>
3626-
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)\s*)?(\()(?=\s*$)</string>
3655+
<string>(?&lt;=[(=,]|=&gt;)\s*(async)?\s*(\()(?=\s*$)</string>
36273656
<key>beginCaptures</key>
36283657
<dict>
36293658
<key>1</key>
@@ -3651,19 +3680,7 @@
36513680
<array>
36523681
<dict>
36533682
<key>include</key>
3654-
<string>#expressionWithoutIdentifiers</string>
3655-
</dict>
3656-
<dict>
3657-
<key>include</key>
3658-
<string>#function-parameters-body</string>
3659-
</dict>
3660-
<dict>
3661-
<key>include</key>
3662-
<string>#identifiers</string>
3663-
</dict>
3664-
<dict>
3665-
<key>include</key>
3666-
<string>#expressionPunctuations</string>
3683+
<string>#expression-inside-possibly-arrow-parens</string>
36673684
</dict>
36683685
</array>
36693686
</dict>
@@ -3673,6 +3690,28 @@
36733690
</dict>
36743691
</array>
36753692
</dict>
3693+
<key>expression-inside-possibly-arrow-parens</key>
3694+
<dict>
3695+
<key>patterns</key>
3696+
<array>
3697+
<dict>
3698+
<key>include</key>
3699+
<string>#expressionWithoutIdentifiers</string>
3700+
</dict>
3701+
<dict>
3702+
<key>include</key>
3703+
<string>#function-parameters-body</string>
3704+
</dict>
3705+
<dict>
3706+
<key>include</key>
3707+
<string>#identifiers</string>
3708+
</dict>
3709+
<dict>
3710+
<key>include</key>
3711+
<string>#expressionPunctuations</string>
3712+
</dict>
3713+
</array>
3714+
</dict>
36763715
<key>paren-expression</key>
36773716
<dict>
36783717
<key>begin</key>

TypeScriptReact.tmLanguage

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3606,7 +3606,7 @@
36063606
<array>
36073607
<dict>
36083608
<key>begin</key>
3609-
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync))?(?=\s*(&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)\(\s*$)</string>
3609+
<string>(?&lt;=[(=,]|=&gt;)\s*(async)?(?=\s*(&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)\(\s*$)</string>
36103610
<key>beginCaptures</key>
36113611
<dict>
36123612
<key>1</key>
@@ -3616,18 +3616,47 @@
36163616
</dict>
36173617
</dict>
36183618
<key>end</key>
3619-
<string>(?&lt;=&gt;)(?!&lt;)</string>
3619+
<string>(?&lt;=\))</string>
36203620
<key>patterns</key>
36213621
<array>
36223622
<dict>
36233623
<key>include</key>
36243624
<string>#type-parameters</string>
36253625
</dict>
3626+
<dict>
3627+
<key>begin</key>
3628+
<string>\(</string>
3629+
<key>beginCaptures</key>
3630+
<dict>
3631+
<key>0</key>
3632+
<dict>
3633+
<key>name</key>
3634+
<string>meta.brace.round.tsx</string>
3635+
</dict>
3636+
</dict>
3637+
<key>end</key>
3638+
<string>\)</string>
3639+
<key>endCaptures</key>
3640+
<dict>
3641+
<key>0</key>
3642+
<dict>
3643+
<key>name</key>
3644+
<string>meta.brace.round.tsx</string>
3645+
</dict>
3646+
</dict>
3647+
<key>patterns</key>
3648+
<array>
3649+
<dict>
3650+
<key>include</key>
3651+
<string>#expression-inside-possibly-arrow-parens</string>
3652+
</dict>
3653+
</array>
3654+
</dict>
36263655
</array>
36273656
</dict>
36283657
<dict>
36293658
<key>begin</key>
3630-
<string>(?:(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(\basync)\s*)?(\()(?=\s*$)</string>
3659+
<string>(?&lt;=[(=,]|=&gt;)\s*(async)?\s*(\()(?=\s*$)</string>
36313660
<key>beginCaptures</key>
36323661
<dict>
36333662
<key>1</key>
@@ -3655,19 +3684,7 @@
36553684
<array>
36563685
<dict>
36573686
<key>include</key>
3658-
<string>#expressionWithoutIdentifiers</string>
3659-
</dict>
3660-
<dict>
3661-
<key>include</key>
3662-
<string>#function-parameters-body</string>
3663-
</dict>
3664-
<dict>
3665-
<key>include</key>
3666-
<string>#identifiers</string>
3667-
</dict>
3668-
<dict>
3669-
<key>include</key>
3670-
<string>#expressionPunctuations</string>
3687+
<string>#expression-inside-possibly-arrow-parens</string>
36713688
</dict>
36723689
</array>
36733690
</dict>
@@ -3677,6 +3694,28 @@
36773694
</dict>
36783695
</array>
36793696
</dict>
3697+
<key>expression-inside-possibly-arrow-parens</key>
3698+
<dict>
3699+
<key>patterns</key>
3700+
<array>
3701+
<dict>
3702+
<key>include</key>
3703+
<string>#expressionWithoutIdentifiers</string>
3704+
</dict>
3705+
<dict>
3706+
<key>include</key>
3707+
<string>#function-parameters-body</string>
3708+
</dict>
3709+
<dict>
3710+
<key>include</key>
3711+
<string>#identifiers</string>
3712+
</dict>
3713+
<dict>
3714+
<key>include</key>
3715+
<string>#expressionPunctuations</string>
3716+
</dict>
3717+
</array>
3718+
</dict>
36803719
<key>paren-expression</key>
36813720
<dict>
36823721
<key>begin</key>

0 commit comments

Comments
 (0)