Skip to content

Commit 9cdd346

Browse files
committed
Fix cast expression detection
Fixes #543
1 parent 8361b1a commit 9cdd346

File tree

4 files changed

+195
-2
lines changed

4 files changed

+195
-2
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1087,7 +1087,7 @@ repository:
10871087
# If '<' is preceeded by 'return', 'throw', 'yield', or 'await', it's most likely a type assertion
10881088
# If '=', '(', ',', ':', or '>' are followed by a '<', it is also likely a type assertion as otherwise it would be a syntax error
10891089
# '<=' and '<<=' are cannot be type assertions, as they are assignment operators.
1090-
begin: (?:(?<=return|throw|yield|await|default|[=(,:>*?]|[^+]\+))\s*(<)(?!<?\=)
1090+
begin: (?:(?<=return|throw|yield|await|default|[=(,:>*?\&\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(<)(?!<?\=)
10911091
beginCaptures:
10921092
'1': { name: meta.brace.angle.ts }
10931093
end: (\>)\s*

TypeScript.tmLanguage

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3409,7 +3409,7 @@
34093409
<key>name</key>
34103410
<string>cast.expr.ts</string>
34113411
<key>begin</key>
3412-
<string>(?:(?&lt;=return|throw|yield|await|default|[=(,:&gt;*?]|[^+]\+))\s*(&lt;)(?!&lt;?\=)</string>
3412+
<string>(?:(?&lt;=return|throw|yield|await|default|[=(,:&gt;*?\&amp;\|\^]|[^_$[:alnum:]](?:\+\+|\-\-)|[^\+]\+|[^\-]\-))\s*(&lt;)(?!&lt;?\=)</string>
34133413
<key>beginCaptures</key>
34143414
<dict>
34153415
<key>1</key>

tests/baselines/Issue543.baseline.txt

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
original file
2+
-----------------------------------
3+
// @onlyOwnGrammar - As this has cast
4+
let x = -<any>5;
5+
x = -<number>-x;
6+
x = +<number>x;
7+
<number>1 && <number>2 & <number>3 | <number>4 + <number>5 ^ <number>6 && (<number>5)
8+
-----------------------------------
9+
10+
Grammar: TypeScript.tmLanguage
11+
-----------------------------------
12+
>// @onlyOwnGrammar - As this has cast
13+
^^
14+
source.ts comment.line.double-slash.ts punctuation.definition.comment.ts
15+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16+
source.ts comment.line.double-slash.ts
17+
>let x = -<any>5;
18+
^^^
19+
source.ts meta.var.expr.ts storage.type.ts
20+
^
21+
source.ts meta.var.expr.ts
22+
^
23+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
24+
^
25+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts
26+
^
27+
source.ts meta.var.expr.ts keyword.operator.assignment.ts
28+
^
29+
source.ts meta.var.expr.ts
30+
^
31+
source.ts meta.var.expr.ts keyword.operator.arithmetic.ts
32+
^
33+
source.ts meta.var.expr.ts cast.expr.ts meta.brace.angle.ts
34+
^^^
35+
source.ts meta.var.expr.ts cast.expr.ts support.type.primitive.ts
36+
^
37+
source.ts meta.var.expr.ts cast.expr.ts meta.brace.angle.ts
38+
^
39+
source.ts meta.var.expr.ts constant.numeric.decimal.ts
40+
^
41+
source.ts punctuation.terminator.statement.ts
42+
^^
43+
source.ts
44+
>x = -<number>-x;
45+
^
46+
source.ts variable.other.readwrite.ts
47+
^
48+
source.ts
49+
^
50+
source.ts keyword.operator.assignment.ts
51+
^
52+
source.ts
53+
^
54+
source.ts keyword.operator.arithmetic.ts
55+
^
56+
source.ts cast.expr.ts meta.brace.angle.ts
57+
^^^^^^
58+
source.ts cast.expr.ts support.type.primitive.ts
59+
^
60+
source.ts cast.expr.ts meta.brace.angle.ts
61+
^
62+
source.ts keyword.operator.arithmetic.ts
63+
^
64+
source.ts variable.other.readwrite.ts
65+
^
66+
source.ts punctuation.terminator.statement.ts
67+
^^
68+
source.ts
69+
>x = +<number>x;
70+
^
71+
source.ts variable.other.readwrite.ts
72+
^
73+
source.ts
74+
^
75+
source.ts keyword.operator.assignment.ts
76+
^
77+
source.ts
78+
^
79+
source.ts keyword.operator.arithmetic.ts
80+
^
81+
source.ts cast.expr.ts meta.brace.angle.ts
82+
^^^^^^
83+
source.ts cast.expr.ts support.type.primitive.ts
84+
^
85+
source.ts cast.expr.ts meta.brace.angle.ts
86+
^
87+
source.ts variable.other.readwrite.ts
88+
^
89+
source.ts punctuation.terminator.statement.ts
90+
^^
91+
source.ts
92+
><number>1 && <number>2 & <number>3 | <number>4 + <number>5 ^ <number>6 && (<number>5)
93+
^
94+
source.ts cast.expr.ts meta.brace.angle.ts
95+
^^^^^^
96+
source.ts cast.expr.ts support.type.primitive.ts
97+
^
98+
source.ts cast.expr.ts meta.brace.angle.ts
99+
^
100+
source.ts constant.numeric.decimal.ts
101+
^
102+
source.ts
103+
^^
104+
source.ts keyword.operator.logical.ts
105+
^
106+
source.ts cast.expr.ts
107+
^
108+
source.ts cast.expr.ts meta.brace.angle.ts
109+
^^^^^^
110+
source.ts cast.expr.ts support.type.primitive.ts
111+
^
112+
source.ts cast.expr.ts meta.brace.angle.ts
113+
^
114+
source.ts constant.numeric.decimal.ts
115+
^
116+
source.ts
117+
^
118+
source.ts keyword.operator.bitwise.ts
119+
^
120+
source.ts cast.expr.ts
121+
^
122+
source.ts cast.expr.ts meta.brace.angle.ts
123+
^^^^^^
124+
source.ts cast.expr.ts support.type.primitive.ts
125+
^
126+
source.ts cast.expr.ts meta.brace.angle.ts
127+
^
128+
source.ts constant.numeric.decimal.ts
129+
^
130+
source.ts
131+
^
132+
source.ts keyword.operator.bitwise.ts
133+
^
134+
source.ts cast.expr.ts
135+
^
136+
source.ts cast.expr.ts meta.brace.angle.ts
137+
^^^^^^
138+
source.ts cast.expr.ts support.type.primitive.ts
139+
^
140+
source.ts cast.expr.ts meta.brace.angle.ts
141+
^
142+
source.ts constant.numeric.decimal.ts
143+
^
144+
source.ts
145+
^
146+
source.ts keyword.operator.arithmetic.ts
147+
^
148+
source.ts cast.expr.ts
149+
^
150+
source.ts cast.expr.ts meta.brace.angle.ts
151+
^^^^^^
152+
source.ts cast.expr.ts support.type.primitive.ts
153+
^
154+
source.ts cast.expr.ts meta.brace.angle.ts
155+
^
156+
source.ts constant.numeric.decimal.ts
157+
^
158+
source.ts
159+
^
160+
source.ts keyword.operator.bitwise.ts
161+
^
162+
source.ts cast.expr.ts
163+
^
164+
source.ts cast.expr.ts meta.brace.angle.ts
165+
^^^^^^
166+
source.ts cast.expr.ts support.type.primitive.ts
167+
^
168+
source.ts cast.expr.ts meta.brace.angle.ts
169+
^
170+
source.ts constant.numeric.decimal.ts
171+
^
172+
source.ts
173+
^^
174+
source.ts keyword.operator.logical.ts
175+
^
176+
source.ts
177+
^
178+
source.ts meta.brace.round.ts
179+
^
180+
source.ts cast.expr.ts meta.brace.angle.ts
181+
^^^^^^
182+
source.ts cast.expr.ts support.type.primitive.ts
183+
^
184+
source.ts cast.expr.ts meta.brace.angle.ts
185+
^
186+
source.ts constant.numeric.decimal.ts
187+
^
188+
source.ts meta.brace.round.ts

tests/cases/Issue543.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// @onlyOwnGrammar - As this has cast
2+
let x = -<any>5;
3+
x = -<number>-x;
4+
x = +<number>x;
5+
<number>1 && <number>2 & <number>3 | <number>4 + <number>5 ^ <number>6 && (<number>5)

0 commit comments

Comments
 (0)