Skip to content

Commit 634a12f

Browse files
committed
Handle ternary operator with typeof
Fixes #870
1 parent c0cba7d commit 634a12f

File tree

5 files changed

+143
-3
lines changed

5 files changed

+143
-3
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1743,7 +1743,7 @@ repository:
17431743
begin: '{{startOfIdentifier}}typeof{{endOfIdentifier}}'
17441744
beginCaptures:
17451745
'0': { name: keyword.operator.expression.typeof.ts }
1746-
end: (?=[,);}\]=>:&|{]|$|{{endOfStatement}})
1746+
end: (?=[,);}\]=>:&|{\?]|$|{{endOfStatement}})
17471747
patterns:
17481748
- include: '#expression'
17491749

TypeScript.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5663,7 +5663,7 @@
56635663
</dict>
56645664
</dict>
56655665
<key>end</key>
5666-
<string>(?=[,);}\]=&gt;:&amp;|{]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))</string>
5666+
<string>(?=[,);}\]=&gt;:&amp;|{\?]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))</string>
56675667
<key>patterns</key>
56685668
<array>
56695669
<dict>

TypeScriptReact.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5609,7 +5609,7 @@
56095609
</dict>
56105610
</dict>
56115611
<key>end</key>
5612-
<string>(?=[,);}\]=&gt;:&amp;|{]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))</string>
5612+
<string>(?=[,);}\]=&gt;:&amp;|{\?]|$|;|^\s*$|(?:^\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\b))</string>
56135613
<key>patterns</key>
56145614
<array>
56155615
<dict>
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
original file
2+
-----------------------------------
3+
const a = [1]
4+
type Test<A> = {
5+
2: 2;
6+
3: 3;
7+
}[A extends typeof a ? 2 : 3];
8+
const foo = 30;
9+
-----------------------------------
10+
11+
Grammar: TypeScript.tmLanguage
12+
-----------------------------------
13+
>const a = [1]
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 meta.array.literal.ts
26+
^
27+
source.ts meta.var.expr.ts meta.array.literal.ts meta.brace.square.ts
28+
^
29+
source.ts meta.var.expr.ts meta.array.literal.ts constant.numeric.decimal.ts
30+
^
31+
source.ts meta.var.expr.ts meta.array.literal.ts meta.brace.square.ts
32+
>type Test<A> = {
33+
^^^^
34+
source.ts meta.type.declaration.ts storage.type.type.ts
35+
^
36+
source.ts meta.type.declaration.ts
37+
^^^^
38+
source.ts meta.type.declaration.ts entity.name.type.alias.ts
39+
^
40+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
41+
^
42+
source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts
43+
^
44+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
45+
^
46+
source.ts meta.type.declaration.ts
47+
^
48+
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
49+
^
50+
source.ts meta.type.declaration.ts
51+
^
52+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
53+
> 2: 2;
54+
^^^^
55+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts
56+
^
57+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts constant.numeric.decimal.ts
58+
^
59+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
60+
^
61+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
62+
^
63+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts constant.numeric.decimal.ts
64+
^
65+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
66+
> 3: 3;
67+
^^^^
68+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts
69+
^
70+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts constant.numeric.decimal.ts
71+
^
72+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
73+
^
74+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts
75+
^
76+
source.ts meta.type.declaration.ts meta.object.type.ts meta.field.declaration.ts meta.type.annotation.ts constant.numeric.decimal.ts
77+
^
78+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
79+
>}[A extends typeof a ? 2 : 3];
80+
^
81+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
82+
^
83+
source.ts meta.type.declaration.ts meta.type.tuple.ts meta.brace.square.ts
84+
^
85+
source.ts meta.type.declaration.ts meta.type.tuple.ts entity.name.type.ts
86+
^
87+
source.ts meta.type.declaration.ts meta.type.tuple.ts
88+
^^^^^^^
89+
source.ts meta.type.declaration.ts meta.type.tuple.ts storage.modifier.ts
90+
^
91+
source.ts meta.type.declaration.ts meta.type.tuple.ts
92+
^^^^^^
93+
source.ts meta.type.declaration.ts meta.type.tuple.ts keyword.operator.expression.typeof.ts
94+
^
95+
source.ts meta.type.declaration.ts meta.type.tuple.ts
96+
^
97+
source.ts meta.type.declaration.ts meta.type.tuple.ts variable.other.readwrite.ts
98+
^
99+
source.ts meta.type.declaration.ts meta.type.tuple.ts
100+
^
101+
source.ts meta.type.declaration.ts meta.type.tuple.ts keyword.operator.ternary.ts
102+
^
103+
source.ts meta.type.declaration.ts meta.type.tuple.ts
104+
^
105+
source.ts meta.type.declaration.ts meta.type.tuple.ts constant.numeric.decimal.ts
106+
^
107+
source.ts meta.type.declaration.ts meta.type.tuple.ts
108+
^
109+
source.ts meta.type.declaration.ts meta.type.tuple.ts keyword.operator.ternary.ts
110+
^
111+
source.ts meta.type.declaration.ts meta.type.tuple.ts
112+
^
113+
source.ts meta.type.declaration.ts meta.type.tuple.ts constant.numeric.decimal.ts
114+
^
115+
source.ts meta.type.declaration.ts meta.type.tuple.ts meta.brace.square.ts
116+
^
117+
source.ts punctuation.terminator.statement.ts
118+
>const foo = 30;
119+
^^^^^
120+
source.ts meta.var.expr.ts storage.type.ts
121+
^
122+
source.ts meta.var.expr.ts
123+
^^^
124+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts
125+
^
126+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
127+
^
128+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
129+
^
130+
source.ts meta.var.expr.ts
131+
^^
132+
source.ts meta.var.expr.ts constant.numeric.decimal.ts
133+
^
134+
source.ts punctuation.terminator.statement.ts

tests/cases/Issue870.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const a = [1]
2+
type Test<A> = {
3+
2: 2;
4+
3: 3;
5+
}[A extends typeof a ? 2 : 3];
6+
const foo = 30;

0 commit comments

Comments
 (0)