Skip to content

Commit 60cc328

Browse files
committed
Multiline arrow in object literal members
Fixes #597
1 parent de11c82 commit 60cc328

File tree

5 files changed

+341
-0
lines changed

5 files changed

+341
-0
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ variables:
3333
matchingBrackets: (\[([^\[\]]|(\[[^\[\]]*\]))*\])
3434
inlineComment: \/\*([^\*]|(\*[^\/]))*\*\/
3535
lookBehindOfPossiblyMultilineArrow: (?<=[(=,]|=>)
36+
lookBehindOfObjectMemberPossiblyMultilineArrow: (?<=:)
3637
# Identifier start | matching braces | matching parenthesis | matching square brackets
3738
typeParamersStart: ([_$[:alpha:]]|{{matchingBraces}}|{{matchingParenthesis}}|{{matchingBrackets}})
3839
typeParameters: (<\s*{{typeParamersStart}}([^=<>]|=[^<]|\<\s*{{typeParamersStart}}([^=<>]|=[^<])*\>)*>\s*)
@@ -1113,6 +1114,29 @@ repository:
11131114
'0': { name: meta.object-literal.key.ts punctuation.separator.key-value.ts }
11141115
end: (?=,|\})
11151116
patterns:
1117+
- begin: '{{lookBehindOfObjectMemberPossiblyMultilineArrow}}\s*(async)?(?=\s*{{typeParameters}}\(\s*$)'
1118+
beginCaptures:
1119+
'1': { name: storage.modifier.async.ts }
1120+
end: (?<=\))
1121+
patterns:
1122+
- include: '#type-parameters'
1123+
- begin: \(
1124+
beginCaptures:
1125+
'0': { name: meta.brace.round.ts }
1126+
end: \)
1127+
endCaptures:
1128+
'0': { name: meta.brace.round.ts }
1129+
patterns:
1130+
- include: '#expression-inside-possibly-arrow-parens'
1131+
- begin: '{{lookBehindOfObjectMemberPossiblyMultilineArrow}}\s*(async)?\s*(\()(?=\s*$)'
1132+
beginCaptures:
1133+
'1': { name: storage.modifier.async.ts }
1134+
'2': { name: meta.brace.round.ts }
1135+
end: \)
1136+
endCaptures:
1137+
'0': { name: meta.brace.round.ts }
1138+
patterns:
1139+
- include: '#expression-inside-possibly-arrow-parens'
11161140
- include: '#expression'
11171141
- include: '#punctuation-comma'
11181142

TypeScript.tmLanguage

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3492,6 +3492,90 @@
34923492
<string>(?=,|\})</string>
34933493
<key>patterns</key>
34943494
<array>
3495+
<dict>
3496+
<key>begin</key>
3497+
<string>(?&lt;=:)\s*(async)?(?=\s*(&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)\(\s*$)</string>
3498+
<key>beginCaptures</key>
3499+
<dict>
3500+
<key>1</key>
3501+
<dict>
3502+
<key>name</key>
3503+
<string>storage.modifier.async.ts</string>
3504+
</dict>
3505+
</dict>
3506+
<key>end</key>
3507+
<string>(?&lt;=\))</string>
3508+
<key>patterns</key>
3509+
<array>
3510+
<dict>
3511+
<key>include</key>
3512+
<string>#type-parameters</string>
3513+
</dict>
3514+
<dict>
3515+
<key>begin</key>
3516+
<string>\(</string>
3517+
<key>beginCaptures</key>
3518+
<dict>
3519+
<key>0</key>
3520+
<dict>
3521+
<key>name</key>
3522+
<string>meta.brace.round.ts</string>
3523+
</dict>
3524+
</dict>
3525+
<key>end</key>
3526+
<string>\)</string>
3527+
<key>endCaptures</key>
3528+
<dict>
3529+
<key>0</key>
3530+
<dict>
3531+
<key>name</key>
3532+
<string>meta.brace.round.ts</string>
3533+
</dict>
3534+
</dict>
3535+
<key>patterns</key>
3536+
<array>
3537+
<dict>
3538+
<key>include</key>
3539+
<string>#expression-inside-possibly-arrow-parens</string>
3540+
</dict>
3541+
</array>
3542+
</dict>
3543+
</array>
3544+
</dict>
3545+
<dict>
3546+
<key>begin</key>
3547+
<string>(?&lt;=:)\s*(async)?\s*(\()(?=\s*$)</string>
3548+
<key>beginCaptures</key>
3549+
<dict>
3550+
<key>1</key>
3551+
<dict>
3552+
<key>name</key>
3553+
<string>storage.modifier.async.ts</string>
3554+
</dict>
3555+
<key>2</key>
3556+
<dict>
3557+
<key>name</key>
3558+
<string>meta.brace.round.ts</string>
3559+
</dict>
3560+
</dict>
3561+
<key>end</key>
3562+
<string>\)</string>
3563+
<key>endCaptures</key>
3564+
<dict>
3565+
<key>0</key>
3566+
<dict>
3567+
<key>name</key>
3568+
<string>meta.brace.round.ts</string>
3569+
</dict>
3570+
</dict>
3571+
<key>patterns</key>
3572+
<array>
3573+
<dict>
3574+
<key>include</key>
3575+
<string>#expression-inside-possibly-arrow-parens</string>
3576+
</dict>
3577+
</array>
3578+
</dict>
34953579
<dict>
34963580
<key>include</key>
34973581
<string>#expression</string>

TypeScriptReact.tmLanguage

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3496,6 +3496,90 @@
34963496
<string>(?=,|\})</string>
34973497
<key>patterns</key>
34983498
<array>
3499+
<dict>
3500+
<key>begin</key>
3501+
<string>(?&lt;=:)\s*(async)?(?=\s*(&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;]|\&lt;\s*([_$[:alpha:]]|(\{([^\{\}]|(\{[^\{\}]*\}))*\})|(\(([^\(\)]|(\([^\(\)]*\)))*\))|(\[([^\[\]]|(\[[^\[\]]*\]))*\]))([^=&lt;&gt;]|=[^&lt;])*\&gt;)*&gt;\s*)\(\s*$)</string>
3502+
<key>beginCaptures</key>
3503+
<dict>
3504+
<key>1</key>
3505+
<dict>
3506+
<key>name</key>
3507+
<string>storage.modifier.async.tsx</string>
3508+
</dict>
3509+
</dict>
3510+
<key>end</key>
3511+
<string>(?&lt;=\))</string>
3512+
<key>patterns</key>
3513+
<array>
3514+
<dict>
3515+
<key>include</key>
3516+
<string>#type-parameters</string>
3517+
</dict>
3518+
<dict>
3519+
<key>begin</key>
3520+
<string>\(</string>
3521+
<key>beginCaptures</key>
3522+
<dict>
3523+
<key>0</key>
3524+
<dict>
3525+
<key>name</key>
3526+
<string>meta.brace.round.tsx</string>
3527+
</dict>
3528+
</dict>
3529+
<key>end</key>
3530+
<string>\)</string>
3531+
<key>endCaptures</key>
3532+
<dict>
3533+
<key>0</key>
3534+
<dict>
3535+
<key>name</key>
3536+
<string>meta.brace.round.tsx</string>
3537+
</dict>
3538+
</dict>
3539+
<key>patterns</key>
3540+
<array>
3541+
<dict>
3542+
<key>include</key>
3543+
<string>#expression-inside-possibly-arrow-parens</string>
3544+
</dict>
3545+
</array>
3546+
</dict>
3547+
</array>
3548+
</dict>
3549+
<dict>
3550+
<key>begin</key>
3551+
<string>(?&lt;=:)\s*(async)?\s*(\()(?=\s*$)</string>
3552+
<key>beginCaptures</key>
3553+
<dict>
3554+
<key>1</key>
3555+
<dict>
3556+
<key>name</key>
3557+
<string>storage.modifier.async.tsx</string>
3558+
</dict>
3559+
<key>2</key>
3560+
<dict>
3561+
<key>name</key>
3562+
<string>meta.brace.round.tsx</string>
3563+
</dict>
3564+
</dict>
3565+
<key>end</key>
3566+
<string>\)</string>
3567+
<key>endCaptures</key>
3568+
<dict>
3569+
<key>0</key>
3570+
<dict>
3571+
<key>name</key>
3572+
<string>meta.brace.round.tsx</string>
3573+
</dict>
3574+
</dict>
3575+
<key>patterns</key>
3576+
<array>
3577+
<dict>
3578+
<key>include</key>
3579+
<string>#expression-inside-possibly-arrow-parens</string>
3580+
</dict>
3581+
</array>
3582+
</dict>
34993583
<dict>
35003584
<key>include</key>
35013585
<string>#expression</string>
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
original file
2+
-----------------------------------
3+
const a = {
4+
x: (y: string) => {}
5+
};
6+
7+
const b = {
8+
x: (
9+
y: string
10+
) => {}
11+
};
12+
-----------------------------------
13+
14+
Grammar: TypeScript.tmLanguage
15+
-----------------------------------
16+
>const a = {
17+
^^^^^
18+
source.ts meta.var.expr.ts storage.type.ts
19+
^
20+
source.ts meta.var.expr.ts
21+
^
22+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
23+
^
24+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
25+
^
26+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
27+
^
28+
source.ts meta.var.expr.ts
29+
^
30+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
31+
^^
32+
source.ts meta.var.expr.ts meta.objectliteral.ts
33+
> x: (y: string) => {}
34+
^^
35+
source.ts meta.var.expr.ts meta.objectliteral.ts
36+
^
37+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts entity.name.function.ts
38+
^
39+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
40+
^
41+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts
42+
^
43+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
44+
^
45+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts variable.parameter.ts
46+
^
47+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
48+
^
49+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts
50+
^^^^^^
51+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
52+
^
53+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.parameters.ts punctuation.definition.parameters.end.ts
54+
^
55+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts
56+
^^
57+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts storage.type.function.arrow.ts
58+
^
59+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts
60+
^
61+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
62+
^
63+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
64+
^^
65+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
66+
>};
67+
^
68+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
69+
^
70+
source.ts punctuation.terminator.statement.ts
71+
^^
72+
source.ts
73+
>
74+
^^
75+
source.ts
76+
>const b = {
77+
^^^^^
78+
source.ts meta.var.expr.ts storage.type.ts
79+
^
80+
source.ts meta.var.expr.ts
81+
^
82+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
83+
^
84+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
85+
^
86+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
87+
^
88+
source.ts meta.var.expr.ts
89+
^
90+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
91+
^^
92+
source.ts meta.var.expr.ts meta.objectliteral.ts
93+
> x: (
94+
^^
95+
source.ts meta.var.expr.ts meta.objectliteral.ts
96+
^
97+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts entity.name.function.ts
98+
^
99+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
100+
^
101+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
102+
^
103+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.brace.round.ts
104+
^^
105+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
106+
> y: string
107+
^^^^
108+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
109+
^
110+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts variable.parameter.ts
111+
^
112+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
113+
^
114+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts
115+
^^^^^^
116+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts support.type.primitive.ts
117+
^
118+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts
119+
> ) => {}
120+
^^
121+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
122+
^
123+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.brace.round.ts
124+
^
125+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
126+
^^
127+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts storage.type.function.arrow.ts
128+
^
129+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts
130+
^
131+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
132+
^
133+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
134+
^^
135+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
136+
>};
137+
^
138+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
139+
^
140+
source.ts punctuation.terminator.statement.ts

tests/cases/Issues597.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const a = {
2+
x: (y: string) => {}
3+
};
4+
5+
const b = {
6+
x: (
7+
y: string
8+
) => {}
9+
};

0 commit comments

Comments
 (0)