Skip to content

Commit 7e4ccfd

Browse files
committed
Include matching return type using arrow in method declaration
Fixes #836
1 parent 0355d15 commit 7e4ccfd

File tree

5 files changed

+211
-0
lines changed

5 files changed

+211
-0
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@ repository:
709709
- include: '#type-parameters'
710710
- include: '#function-parameters'
711711
- include: '#return-type'
712+
- include: '#type-function-return-type'
712713
- include: '#decl-block'
713714
- name: keyword.generator.asterisk.ts
714715
match: \*

TypeScript.tmLanguage

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2184,6 +2184,10 @@
21842184
<key>include</key>
21852185
<string>#return-type</string>
21862186
</dict>
2187+
<dict>
2188+
<key>include</key>
2189+
<string>#type-function-return-type</string>
2190+
</dict>
21872191
<dict>
21882192
<key>include</key>
21892193
<string>#decl-block</string>

TypeScriptReact.tmLanguage

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2204,6 +2204,10 @@
22042204
<key>include</key>
22052205
<string>#return-type</string>
22062206
</dict>
2207+
<dict>
2208+
<key>include</key>
2209+
<string>#type-function-return-type</string>
2210+
</dict>
22072211
<dict>
22082212
<key>include</key>
22092213
<string>#decl-block</string>

tests/baselines/Issue836.baseline.txt

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
original file
2+
-----------------------------------
3+
const _actions = {} as {
4+
[P in keyof Actions] : PropType<Parameters<Actions[P]> , "0"> extends object ?
5+
(payload: PropType<Parameters<Actions[P]> , "0">) => void
6+
:
7+
() => void;
8+
};
9+
-----------------------------------
10+
11+
Grammar: TypeScript.tmLanguage
12+
-----------------------------------
13+
>const _actions = {} as {
14+
^^^^^
15+
source.ts meta.var.expr.ts storage.type.ts
16+
^
17+
source.ts meta.var.expr.ts
18+
^^^^^^^^
19+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
20+
^
21+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
22+
^
23+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
24+
^
25+
source.ts meta.var.expr.ts
26+
^
27+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
28+
^
29+
source.ts meta.var.expr.ts meta.objectliteral.ts punctuation.definition.block.ts
30+
^
31+
source.ts meta.var.expr.ts
32+
^^
33+
source.ts meta.var.expr.ts keyword.control.as.ts
34+
^
35+
source.ts meta.var.expr.ts
36+
^
37+
source.ts meta.var.expr.ts meta.object.type.ts punctuation.definition.block.ts
38+
> [P in keyof Actions] : PropType<Parameters<Actions[P]> , "0"> extends object ?
39+
^^^^
40+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
41+
^
42+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
43+
^
44+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
45+
^
46+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
47+
^^
48+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.in.ts
49+
^
50+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
51+
^^^^^
52+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.keyof.ts
53+
^
54+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
55+
^^^^^^^
56+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
57+
^
58+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
59+
^
60+
source.ts meta.var.expr.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
61+
^
62+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
63+
^
64+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
65+
^^^^^^^^
66+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
67+
^
68+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
69+
^^^^^^^^^^
70+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts entity.name.type.ts
71+
^
72+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
73+
^^^^^^^
74+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts entity.name.type.ts
75+
^
76+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
77+
^
78+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts meta.type.tuple.ts entity.name.type.ts
79+
^
80+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
81+
^
82+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
83+
^
84+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts
85+
^
86+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.separator.comma.ts
87+
^
88+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts
89+
^
90+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.begin.ts
91+
^
92+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts string.quoted.double.ts
93+
^
94+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.end.ts
95+
^
96+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
97+
^
98+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
99+
^^^^^^^
100+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts storage.modifier.ts
101+
^
102+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
103+
^^^^^^
104+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts support.type.builtin.ts
105+
^
106+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
107+
^
108+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.ternary.ts
109+
^^
110+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
111+
> (payload: PropType<Parameters<Actions[P]> , "0">) => void
112+
^^^^^^
113+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
114+
^
115+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
116+
^^^^^^^
117+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts variable.parameter.ts
118+
^
119+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
120+
^
121+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts
122+
^^^^^^^^
123+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
124+
^
125+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
126+
^^^^^^^^^^
127+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts entity.name.type.ts
128+
^
129+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
130+
^^^^^^^
131+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts entity.name.type.ts
132+
^
133+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
134+
^
135+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts meta.type.tuple.ts entity.name.type.ts
136+
^
137+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
138+
^
139+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
140+
^
141+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts
142+
^
143+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.separator.comma.ts
144+
^
145+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts
146+
^
147+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.begin.ts
148+
^
149+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts string.quoted.double.ts
150+
^
151+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.end.ts
152+
^
153+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
154+
^
155+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
156+
^
157+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
158+
^^
159+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.return.ts storage.type.function.arrow.ts
160+
^
161+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.return.ts
162+
^^^^
163+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.return.ts support.type.primitive.ts
164+
^
165+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts meta.type.function.return.ts
166+
> :
167+
^^^^^^
168+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
169+
^
170+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.ternary.ts
171+
^
172+
source.ts meta.var.expr.ts meta.object.type.ts meta.type.annotation.ts
173+
> () => void;
174+
^^^^^^
175+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts
176+
^
177+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
178+
^
179+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
180+
^
181+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts
182+
^^
183+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts meta.type.function.return.ts storage.type.function.arrow.ts
184+
^
185+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts meta.type.function.return.ts
186+
^^^^
187+
source.ts meta.var.expr.ts meta.object.type.ts meta.method.declaration.ts meta.type.function.return.ts support.type.primitive.ts
188+
^
189+
source.ts meta.var.expr.ts meta.object.type.ts punctuation.terminator.statement.ts
190+
> };
191+
^^
192+
source.ts meta.var.expr.ts meta.object.type.ts
193+
^
194+
source.ts meta.var.expr.ts meta.object.type.ts punctuation.definition.block.ts
195+
^
196+
source.ts punctuation.terminator.statement.ts

tests/cases/Issue836.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const _actions = {} as {
2+
[P in keyof Actions] : PropType<Parameters<Actions[P]> , "0"> extends object ?
3+
(payload: PropType<Parameters<Actions[P]> , "0">) => void
4+
:
5+
() => void;
6+
};

0 commit comments

Comments
 (0)