Skip to content

Commit 377ed36

Browse files
committed
Make conditional type colorization little bit better
1 parent 591c34f commit 377ed36

File tree

5 files changed

+126
-19
lines changed

5 files changed

+126
-19
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,10 +1826,9 @@ repository:
18261826

18271827
#conditional type
18281828
type-conditional:
1829-
match: '{{startOfIdentifier}}({{identifier}})\s+(extends)\s+'
1829+
match: '{{startOfIdentifier}}(extends)\s+'
18301830
captures:
1831-
'1': { name: entity.name.type.ts }
1832-
'2': { name: storage.modifier.ts }
1831+
'1': { name: storage.modifier.ts }
18331832

18341833
# Parenthesis can contain either types and function parameters
18351834
# (number | string) or (param: number, param2: string)

TypeScript.tmLanguage

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5201,15 +5201,10 @@
52015201
<key>type-conditional</key>
52025202
<dict>
52035203
<key>match</key>
5204-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([_$[:alpha:]][_$[:alnum:]]*)\s+(extends)\s+</string>
5204+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends)\s+</string>
52055205
<key>captures</key>
52065206
<dict>
52075207
<key>1</key>
5208-
<dict>
5209-
<key>name</key>
5210-
<string>entity.name.type.ts</string>
5211-
</dict>
5212-
<key>2</key>
52135208
<dict>
52145209
<key>name</key>
52155210
<string>storage.modifier.ts</string>

TypeScriptReact.tmLanguage

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5147,15 +5147,10 @@
51475147
<key>type-conditional</key>
51485148
<dict>
51495149
<key>match</key>
5150-
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))([_$[:alpha:]][_$[:alnum:]]*)\s+(extends)\s+</string>
5150+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(extends)\s+</string>
51515151
<key>captures</key>
51525152
<dict>
51535153
<key>1</key>
5154-
<dict>
5155-
<key>name</key>
5156-
<string>entity.name.type.tsx</string>
5157-
</dict>
5158-
<key>2</key>
51595154
<dict>
51605155
<key>name</key>
51615156
<string>storage.modifier.tsx</string>

tests/baselines/conditionalTypes.baseline.txt

Lines changed: 117 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ type TypeName<T> =
77
T extends boolean ? "boolean" :
88
T extends undefined ? "undefined" :
99
T extends Function ? "function" :
10-
"object";
10+
"object";
11+
type Extracted<Struct> = {
12+
[K in keyof Struct]: Struct[K] extends FooBar ? ExtractFooBar<Struct[K]> : Struct[K];
13+
14+
}
1115
-----------------------------------
1216

1317
Grammar: TypeScript.tmLanguage
@@ -239,7 +243,7 @@ Grammar: TypeScript.tmLanguage
239243
source.ts meta.type.declaration.ts keyword.operator.ternary.ts
240244
^^
241245
source.ts meta.type.declaration.ts
242-
> "object";
246+
> "object";
243247
^^^^^^^^^^^^^^^^^^^^^^^^
244248
source.ts meta.type.declaration.ts
245249
^
@@ -249,4 +253,114 @@ Grammar: TypeScript.tmLanguage
249253
^
250254
source.ts meta.type.declaration.ts string.quoted.double.ts punctuation.definition.string.end.ts
251255
^
252-
source.ts punctuation.terminator.statement.ts
256+
source.ts punctuation.terminator.statement.ts
257+
^^
258+
source.ts
259+
>type Extracted<Struct> = {
260+
^^^^
261+
source.ts meta.type.declaration.ts storage.type.type.ts
262+
^
263+
source.ts meta.type.declaration.ts
264+
^^^^^^^^^
265+
source.ts meta.type.declaration.ts entity.name.type.alias.ts
266+
^
267+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
268+
^^^^^^
269+
source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts
270+
^
271+
source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
272+
^^
273+
source.ts meta.type.declaration.ts
274+
^
275+
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
276+
^
277+
source.ts meta.type.declaration.ts
278+
^
279+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
280+
^^
281+
source.ts meta.type.declaration.ts meta.object.type.ts
282+
> [K in keyof Struct]: Struct[K] extends FooBar ? ExtractFooBar<Struct[K]> : Struct[K];
283+
^
284+
source.ts meta.type.declaration.ts meta.object.type.ts
285+
^
286+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
287+
^
288+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
289+
^
290+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
291+
^^
292+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.in.ts
293+
^
294+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
295+
^^^^^
296+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.keyof.ts
297+
^
298+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
299+
^^^^^^
300+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
301+
^
302+
source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
303+
^
304+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
305+
^
306+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
307+
^^^^^^
308+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
309+
^
310+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
311+
^
312+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
313+
^
314+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
315+
^
316+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
317+
^^^^^^^
318+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts storage.modifier.ts
319+
^
320+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
321+
^^^^^^
322+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
323+
^
324+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
325+
^
326+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.ternary.ts
327+
^
328+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
329+
^^^^^^^^^^^^^
330+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
331+
^
332+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
333+
^^^^^^
334+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts entity.name.type.ts
335+
^
336+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
337+
^
338+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.tuple.ts entity.name.type.ts
339+
^
340+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
341+
^
342+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
343+
^
344+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
345+
^
346+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.ternary.ts
347+
^
348+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
349+
^^^^^^
350+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
351+
^
352+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
353+
^
354+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
355+
^
356+
source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
357+
^
358+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
359+
^^
360+
source.ts meta.type.declaration.ts meta.object.type.ts
361+
>
362+
^^
363+
source.ts meta.type.declaration.ts meta.object.type.ts
364+
>}
365+
^
366+
source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts

tests/cases/conditionalTypes.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ type TypeName<T> =
55
T extends boolean ? "boolean" :
66
T extends undefined ? "undefined" :
77
T extends Function ? "function" :
8-
"object";
8+
"object";
9+
type Extracted<Struct> = {
10+
[K in keyof Struct]: Struct[K] extends FooBar ? ExtractFooBar<Struct[K]> : Struct[K];
11+
12+
}

0 commit comments

Comments
 (0)