Skip to content

Commit b7ef094

Browse files
committed
Fix multiline arrow assignment with multiline arrow type parameters to the object member
Fixes #796
1 parent c858569 commit b7ef094

File tree

5 files changed

+299
-0
lines changed

5 files changed

+299
-0
lines changed

Diff for: TypeScript.YAML-tmLanguage

+14
Original file line numberDiff line numberDiff line change
@@ -1418,6 +1418,20 @@ repository:
14181418
'0': { name: meta.brace.round.ts }
14191419
patterns:
14201420
- include: '#expression-inside-possibly-arrow-parens'
1421+
- begin: '{{lookBehindOfObjectMemberPossiblyMultilineArrow}}\s*(async)?\s*(?=\<\s*$)'
1422+
beginCaptures:
1423+
'1': { name: storage.modifier.async.ts }
1424+
end: (?<=\>)
1425+
patterns:
1426+
- include: '#type-parameters'
1427+
- begin: '(?<=\>)\s*(\()(?=\s*{{possiblyMultilineArrowWParamters}})'
1428+
beginCaptures:
1429+
'1': { name: meta.brace.round.ts }
1430+
end: \)
1431+
endCaptures:
1432+
'0': { name: meta.brace.round.ts }
1433+
patterns:
1434+
- include: '#expression-inside-possibly-arrow-parens'
14211435
- include: '#possibly-arrow-return-type'
14221436
- include: '#expression'
14231437
- include: '#punctuation-comma'

Diff for: TypeScript.tmLanguage

+50
Original file line numberDiff line numberDiff line change
@@ -4583,6 +4583,56 @@
45834583
</dict>
45844584
</array>
45854585
</dict>
4586+
<dict>
4587+
<key>begin</key>
4588+
<string>(?&lt;=:)\s*(async)?\s*(?=\&lt;\s*$)</string>
4589+
<key>beginCaptures</key>
4590+
<dict>
4591+
<key>1</key>
4592+
<dict>
4593+
<key>name</key>
4594+
<string>storage.modifier.async.ts</string>
4595+
</dict>
4596+
</dict>
4597+
<key>end</key>
4598+
<string>(?&lt;=\&gt;)</string>
4599+
<key>patterns</key>
4600+
<array>
4601+
<dict>
4602+
<key>include</key>
4603+
<string>#type-parameters</string>
4604+
</dict>
4605+
</array>
4606+
</dict>
4607+
<dict>
4608+
<key>begin</key>
4609+
<string>(?&lt;=\&gt;)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4610+
<key>beginCaptures</key>
4611+
<dict>
4612+
<key>1</key>
4613+
<dict>
4614+
<key>name</key>
4615+
<string>meta.brace.round.ts</string>
4616+
</dict>
4617+
</dict>
4618+
<key>end</key>
4619+
<string>\)</string>
4620+
<key>endCaptures</key>
4621+
<dict>
4622+
<key>0</key>
4623+
<dict>
4624+
<key>name</key>
4625+
<string>meta.brace.round.ts</string>
4626+
</dict>
4627+
</dict>
4628+
<key>patterns</key>
4629+
<array>
4630+
<dict>
4631+
<key>include</key>
4632+
<string>#expression-inside-possibly-arrow-parens</string>
4633+
</dict>
4634+
</array>
4635+
</dict>
45864636
<dict>
45874637
<key>include</key>
45884638
<string>#possibly-arrow-return-type</string>

Diff for: TypeScriptReact.tmLanguage

+50
Original file line numberDiff line numberDiff line change
@@ -4607,6 +4607,56 @@
46074607
</dict>
46084608
</array>
46094609
</dict>
4610+
<dict>
4611+
<key>begin</key>
4612+
<string>(?&lt;=:)\s*(async)?\s*(?=\&lt;\s*$)</string>
4613+
<key>beginCaptures</key>
4614+
<dict>
4615+
<key>1</key>
4616+
<dict>
4617+
<key>name</key>
4618+
<string>storage.modifier.async.tsx</string>
4619+
</dict>
4620+
</dict>
4621+
<key>end</key>
4622+
<string>(?&lt;=\&gt;)</string>
4623+
<key>patterns</key>
4624+
<array>
4625+
<dict>
4626+
<key>include</key>
4627+
<string>#type-parameters</string>
4628+
</dict>
4629+
</array>
4630+
</dict>
4631+
<dict>
4632+
<key>begin</key>
4633+
<string>(?&lt;=\&gt;)\s*(\()(?=\s*((([\{\[]\s*)?$)|((\{([^\{\}]|(\{[^\{\}]*\}))*\})\s*((:\s*\{?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))|((\[([^\[\]]|(\[[^\[\]]*\]))*\])\s*((:\s*\[?$)|((\s*([^&lt;&gt;\(\)\{\}]|\&lt;([^&lt;&gt;]|\&lt;[^&lt;&gt;]+\&gt;)+\&gt;|\([^\(\)]+\)|\{[^\{\}]+\})+\s*)?=\s*)))))</string>
4634+
<key>beginCaptures</key>
4635+
<dict>
4636+
<key>1</key>
4637+
<dict>
4638+
<key>name</key>
4639+
<string>meta.brace.round.tsx</string>
4640+
</dict>
4641+
</dict>
4642+
<key>end</key>
4643+
<string>\)</string>
4644+
<key>endCaptures</key>
4645+
<dict>
4646+
<key>0</key>
4647+
<dict>
4648+
<key>name</key>
4649+
<string>meta.brace.round.tsx</string>
4650+
</dict>
4651+
</dict>
4652+
<key>patterns</key>
4653+
<array>
4654+
<dict>
4655+
<key>include</key>
4656+
<string>#expression-inside-possibly-arrow-parens</string>
4657+
</dict>
4658+
</array>
4659+
</dict>
46104660
<dict>
46114661
<key>include</key>
46124662
<string>#possibly-arrow-return-type</string>

Diff for: tests/baselines/Issue796.baseline.txt

+174
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
original file
2+
-----------------------------------
3+
const h = {
4+
setSubProperty: <
5+
T extends A,
6+
K extends keyof T,
7+
J extends keyof T[K]
8+
>(
9+
property: K,
10+
key: J,
11+
value: T[K][J]
12+
) => {}
13+
}
14+
-----------------------------------
15+
16+
Grammar: TypeScript.tmLanguage
17+
-----------------------------------
18+
>const h = {
19+
^^^^^
20+
source.ts meta.var.expr.ts storage.type.ts
21+
^
22+
source.ts meta.var.expr.ts
23+
^
24+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
25+
^
26+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
27+
^
28+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
29+
^
30+
source.ts meta.var.expr.ts
31+
^
32+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
33+
> setSubProperty: <
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
42+
^
43+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
44+
> T extends A,
45+
^^^^^^
46+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
47+
^
48+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts entity.name.type.ts
49+
^
50+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
51+
^^^^^^^
52+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts storage.modifier.ts
53+
^
54+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
55+
^
56+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts entity.name.type.ts
57+
^
58+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts punctuation.separator.comma.ts
59+
> K extends keyof T,
60+
^^^^^^
61+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
62+
^
63+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts entity.name.type.ts
64+
^
65+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
66+
^^^^^^^
67+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts storage.modifier.ts
68+
^
69+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
70+
^^^^^
71+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts keyword.operator.expression.keyof.ts
72+
^
73+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
74+
^
75+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts entity.name.type.ts
76+
^
77+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts punctuation.separator.comma.ts
78+
> J extends keyof T[K]
79+
^^^^^^
80+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
81+
^
82+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts entity.name.type.ts
83+
^
84+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
85+
^^^^^^^
86+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts storage.modifier.ts
87+
^
88+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
89+
^^^^^
90+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts keyword.operator.expression.keyof.ts
91+
^
92+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
93+
^
94+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts entity.name.type.ts
95+
^
96+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
97+
^
98+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts meta.type.tuple.ts entity.name.type.ts
99+
^
100+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
101+
> >(
102+
^^^^
103+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts
104+
^
105+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
106+
^
107+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.brace.round.ts
108+
> property: K,
109+
^^^^^^
110+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
111+
^^^^^^^^
112+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts variable.parameter.ts
113+
^
114+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
115+
^
116+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts
117+
^
118+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts entity.name.type.ts
119+
^
120+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts punctuation.separator.parameter.ts
121+
> key: J,
122+
^^^^^^
123+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
124+
^^^
125+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts variable.parameter.ts
126+
^
127+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
128+
^
129+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts
130+
^
131+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts entity.name.type.ts
132+
^
133+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts punctuation.separator.parameter.ts
134+
> value: T[K][J]
135+
^^^^^^
136+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
137+
^^^^^
138+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts variable.parameter.ts
139+
^
140+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
141+
^
142+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts
143+
^
144+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts entity.name.type.ts
145+
^
146+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
147+
^
148+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
149+
^
150+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
151+
^
152+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
153+
^
154+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
155+
^
156+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
157+
> ) => {}
158+
^^^^
159+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
160+
^
161+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.brace.round.ts
162+
^
163+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts
164+
^^
165+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts storage.type.function.arrow.ts
166+
^^
167+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts
168+
^
169+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
170+
^
171+
source.ts meta.var.expr.ts meta.objectliteral.ts meta.object.member.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
172+
>}
173+
^
174+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts

Diff for: tests/cases/Issue796.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const h = {
2+
setSubProperty: <
3+
T extends A,
4+
K extends keyof T,
5+
J extends keyof T[K]
6+
>(
7+
property: K,
8+
key: J,
9+
value: T[K][J]
10+
) => {}
11+
}

0 commit comments

Comments
 (0)