Skip to content

Commit a7080b7

Browse files
committed
Colorize right side of instance of as type
Fixes #578
1 parent e8fea97 commit a7080b7

8 files changed

+167
-3
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ repository:
161161
- include: '#cast'
162162
- include: '#ternary-expression'
163163
- include: '#new-expr'
164+
- include: '#instanceof-expr'
164165
- include: '#object-literal'
165166
- include: '#expression-operators'
166167
- include: '#function-call'
@@ -1133,6 +1134,14 @@ repository:
11331134
- include: '#class-declaration'
11341135
- include: '#type'
11351136

1137+
instanceof-expr:
1138+
begin: '{{startOfIdentifier}}(instanceof){{endOfIdentifier}}'
1139+
beginCaptures:
1140+
'1': { name: keyword.operator.expression.instanceof.ts }
1141+
end: (?<=\))|(?=[;),}\]:]|$|({{startOfIdentifier}}function((\s+{{identifier}})|(\s*[\(]))))
1142+
patterns:
1143+
- include: '#type'
1144+
11361145
paren-expression:
11371146
begin: \(
11381147
beginCaptures:

TypeScript.tmLanguage

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@
255255
<key>include</key>
256256
<string>#new-expr</string>
257257
</dict>
258+
<dict>
259+
<key>include</key>
260+
<string>#instanceof-expr</string>
261+
</dict>
258262
<dict>
259263
<key>include</key>
260264
<string>#object-literal</string>
@@ -3549,6 +3553,28 @@
35493553
</dict>
35503554
</array>
35513555
</dict>
3556+
<key>instanceof-expr</key>
3557+
<dict>
3558+
<key>begin</key>
3559+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3560+
<key>beginCaptures</key>
3561+
<dict>
3562+
<key>1</key>
3563+
<dict>
3564+
<key>name</key>
3565+
<string>keyword.operator.expression.instanceof.ts</string>
3566+
</dict>
3567+
</dict>
3568+
<key>end</key>
3569+
<string>(?&lt;=\))|(?=[;),}\]:]|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
3570+
<key>patterns</key>
3571+
<array>
3572+
<dict>
3573+
<key>include</key>
3574+
<string>#type</string>
3575+
</dict>
3576+
</array>
3577+
</dict>
35523578
<key>paren-expression</key>
35533579
<dict>
35543580
<key>begin</key>

TypeScriptReact.tmLanguage

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,10 @@
259259
<key>include</key>
260260
<string>#new-expr</string>
261261
</dict>
262+
<dict>
263+
<key>include</key>
264+
<string>#instanceof-expr</string>
265+
</dict>
262266
<dict>
263267
<key>include</key>
264268
<string>#object-literal</string>
@@ -3553,6 +3557,28 @@
35533557
</dict>
35543558
</array>
35553559
</dict>
3560+
<key>instanceof-expr</key>
3561+
<dict>
3562+
<key>begin</key>
3563+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(instanceof)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))</string>
3564+
<key>beginCaptures</key>
3565+
<dict>
3566+
<key>1</key>
3567+
<dict>
3568+
<key>name</key>
3569+
<string>keyword.operator.expression.instanceof.tsx</string>
3570+
</dict>
3571+
</dict>
3572+
<key>end</key>
3573+
<string>(?&lt;=\))|(?=[;),}\]:]|$|((?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))function((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))</string>
3574+
<key>patterns</key>
3575+
<array>
3576+
<dict>
3577+
<key>include</key>
3578+
<string>#type</string>
3579+
</dict>
3580+
</array>
3581+
</dict>
35563582
<key>paren-expression</key>
35573583
<dict>
35583584
<key>begin</key>

tests/baselines/Issue37.baseline.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,7 @@ Grammar: TypeScript.tmLanguage
728728
^
729729
source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts
730730
^^^^^
731-
source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts support.class.error.ts
731+
source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts entity.name.type.ts
732732
^
733733
source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.brace.round.ts
734734
^

tests/baselines/Issue37.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ Grammar: TypeScript.tmLanguage
222222
^^^^^^^^^^
223223
[57, 54]: source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts keyword.operator.expression.instanceof.ts
224224
^^^^^
225-
[57, 65]: source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts support.class.error.ts
225+
[57, 65]: source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts entity.name.type.ts
226226
>
227227
^^^^^^^^^^^^^^
228228
[58, 14]: source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.block.ts

tests/baselines/Issue578.baseline.txt

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
original file
2+
-----------------------------------
3+
if (targetAttribute) {
4+
if (!(targetAttribute instanceof Attribute)) {
5+
targetAttribute = new Attribute(targetAttribute);
6+
}
7+
}
8+
-----------------------------------
9+
10+
Grammar: TypeScript.tmLanguage
11+
-----------------------------------
12+
>if (targetAttribute) {
13+
^^
14+
source.ts keyword.control.conditional.ts
15+
^
16+
source.ts
17+
^
18+
source.ts meta.brace.round.ts
19+
^^^^^^^^^^^^^^^
20+
source.ts variable.other.readwrite.ts
21+
^
22+
source.ts meta.brace.round.ts
23+
^
24+
source.ts
25+
^
26+
source.ts meta.block.ts punctuation.definition.block.ts
27+
^^
28+
source.ts meta.block.ts
29+
> if (!(targetAttribute instanceof Attribute)) {
30+
^^^^
31+
source.ts meta.block.ts
32+
^^
33+
source.ts meta.block.ts keyword.control.conditional.ts
34+
^
35+
source.ts meta.block.ts
36+
^
37+
source.ts meta.block.ts meta.brace.round.ts
38+
^
39+
source.ts meta.block.ts keyword.operator.logical.ts
40+
^
41+
source.ts meta.block.ts meta.brace.round.ts
42+
^^^^^^^^^^^^^^^
43+
source.ts meta.block.ts variable.other.readwrite.ts
44+
^
45+
source.ts meta.block.ts
46+
^^^^^^^^^^
47+
source.ts meta.block.ts keyword.operator.expression.instanceof.ts
48+
^
49+
source.ts meta.block.ts
50+
^^^^^^^^^
51+
source.ts meta.block.ts entity.name.type.ts
52+
^
53+
source.ts meta.block.ts meta.brace.round.ts
54+
^
55+
source.ts meta.block.ts meta.brace.round.ts
56+
^
57+
source.ts meta.block.ts
58+
^
59+
source.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
60+
^^
61+
source.ts meta.block.ts meta.block.ts
62+
> targetAttribute = new Attribute(targetAttribute);
63+
^^^^^^^^
64+
source.ts meta.block.ts meta.block.ts
65+
^^^^^^^^^^^^^^^
66+
source.ts meta.block.ts meta.block.ts variable.other.readwrite.ts
67+
^
68+
source.ts meta.block.ts meta.block.ts
69+
^
70+
source.ts meta.block.ts meta.block.ts keyword.operator.assignment.ts
71+
^
72+
source.ts meta.block.ts meta.block.ts
73+
^^^
74+
source.ts meta.block.ts meta.block.ts new.expr.ts keyword.operator.new.ts
75+
^
76+
source.ts meta.block.ts meta.block.ts new.expr.ts
77+
^^^^^^^^^
78+
source.ts meta.block.ts meta.block.ts new.expr.ts entity.name.type.ts
79+
^
80+
source.ts meta.block.ts meta.block.ts new.expr.ts meta.brace.round.ts
81+
^^^^^^^^^^^^^^^
82+
source.ts meta.block.ts meta.block.ts new.expr.ts variable.other.readwrite.ts
83+
^
84+
source.ts meta.block.ts meta.block.ts new.expr.ts meta.brace.round.ts
85+
^
86+
source.ts meta.block.ts meta.block.ts punctuation.terminator.statement.ts
87+
^^
88+
source.ts meta.block.ts meta.block.ts
89+
> }
90+
^^^^
91+
source.ts meta.block.ts meta.block.ts
92+
^
93+
source.ts meta.block.ts meta.block.ts punctuation.definition.block.ts
94+
^^
95+
source.ts meta.block.ts
96+
>}
97+
^
98+
source.ts meta.block.ts punctuation.definition.block.ts

tests/baselines/javascript.baseline.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,6 @@ Grammar: TypeScript.tmLanguage
103103
^
104104
source.ts
105105
^
106-
source.ts variable.other.readwrite.ts
106+
source.ts entity.name.type.ts
107107
^
108108
source.ts punctuation.terminator.statement.ts

tests/cases/Issue578.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
if (targetAttribute) {
2+
if (!(targetAttribute instanceof Attribute)) {
3+
targetAttribute = new Attribute(targetAttribute);
4+
}
5+
}

0 commit comments

Comments
 (0)