Skip to content

Commit 784ee07

Browse files
committed
Support for template literal types added as part of microsoft/TypeScript#40336
1 parent 4006120 commit 784ee07

File tree

5 files changed

+3672
-13
lines changed

5 files changed

+3672
-13
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,9 @@ repository:
861861
'2': { name: keyword.operator.type.modifier.ts }
862862
'3': { name: keyword.operator.optional.ts }
863863
patterns:
864+
- match: '{{startOfIdentifier}}(as)\s+'
865+
captures:
866+
'1': { name: keyword.control.as.ts }
864867
- include: '#type'
865868

866869
function-parameters:
@@ -2307,7 +2310,7 @@ repository:
23072310
type:
23082311
patterns:
23092312
- include: '#comment'
2310-
- include: '#string'
2313+
- include: '#type-string'
23112314
- include: '#numeric-literal'
23122315
- include: '#type-primitive'
23132316
- include: '#type-builtin-literals'
@@ -2625,6 +2628,21 @@ repository:
26252628
match: \\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)
26262629

26272630
template:
2631+
patterns:
2632+
- include: '#template-call'
2633+
- name: string.template.ts
2634+
begin: '({{identifier}})?(`)'
2635+
beginCaptures:
2636+
'1': { name: entity.name.function.tagged-template.ts }
2637+
'2': { name: punctuation.definition.string.template.begin.ts }
2638+
end: '`'
2639+
endCaptures:
2640+
'0': { name: punctuation.definition.string.template.end.ts}
2641+
patterns:
2642+
- include: '#template-substitution-element'
2643+
- include: '#string-character-escape'
2644+
2645+
template-call:
26282646
patterns:
26292647
- name: string.template.ts
26302648
begin: (?=(({{identifier}}\s*{{propertyAccessPreIdentifier}})*|({{propertyAccessPreIdentifier}})?)({{identifier}})({{typeArguments}}\s*)?`)
@@ -2643,7 +2661,29 @@ repository:
26432661
'1': { name: entity.name.function.tagged-template.ts }
26442662
end: (?=`)
26452663
patterns:
2646-
- include: '#type-arguments'
2664+
- include: '#type-arguments'
2665+
2666+
template-substitution-element:
2667+
name: meta.template.expression.ts
2668+
begin: \$\{
2669+
beginCaptures:
2670+
'0': { name: punctuation.definition.template-expression.begin.ts }
2671+
end: \}
2672+
endCaptures:
2673+
'0': { name: punctuation.definition.template-expression.end.ts }
2674+
patterns:
2675+
- include: '#expression'
2676+
contentName: meta.embedded.line.ts
2677+
2678+
type-string:
2679+
patterns:
2680+
- include: '#qstring-single'
2681+
- include: '#qstring-double'
2682+
- include: '#template-type'
2683+
2684+
template-type:
2685+
patterns:
2686+
- include: '#template-call'
26472687
- name: string.template.ts
26482688
begin: '({{identifier}})?(`)'
26492689
beginCaptures:
@@ -2653,10 +2693,10 @@ repository:
26532693
endCaptures:
26542694
'0': { name: punctuation.definition.string.template.end.ts}
26552695
patterns:
2656-
- include: '#template-substitution-element'
2696+
- include: '#template-type-substitution-element'
26572697
- include: '#string-character-escape'
26582698

2659-
template-substitution-element:
2699+
template-type-substitution-element:
26602700
name: meta.template.expression.ts
26612701
begin: \$\{
26622702
beginCaptures:
@@ -2665,7 +2705,7 @@ repository:
26652705
endCaptures:
26662706
'0': { name: punctuation.definition.template-expression.end.ts }
26672707
patterns:
2668-
- include: '#expression'
2708+
- include: '#type'
26692709
contentName: meta.embedded.line.ts
26702710

26712711
#regular expression

TypeScript.tmLanguage

Lines changed: 128 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,6 +2716,18 @@
27162716
</dict>
27172717
<key>patterns</key>
27182718
<array>
2719+
<dict>
2720+
<key>match</key>
2721+
<string>(?&lt;![_$[:alnum:]])(?:(?&lt;=\.\.\.)|(?&lt;!\.))(as)\s+</string>
2722+
<key>captures</key>
2723+
<dict>
2724+
<key>1</key>
2725+
<dict>
2726+
<key>name</key>
2727+
<string>keyword.control.as.ts</string>
2728+
</dict>
2729+
</dict>
2730+
</dict>
27192731
<dict>
27202732
<key>include</key>
27212733
<string>#type</string>
@@ -6972,7 +6984,7 @@
69726984
</dict>
69736985
<dict>
69746986
<key>include</key>
6975-
<string>#string</string>
6987+
<string>#type-string</string>
69766988
</dict>
69776989
<dict>
69786990
<key>include</key>
@@ -7926,6 +7938,56 @@
79267938
<string>\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)</string>
79277939
</dict>
79287940
<key>template</key>
7941+
<dict>
7942+
<key>patterns</key>
7943+
<array>
7944+
<dict>
7945+
<key>include</key>
7946+
<string>#template-call</string>
7947+
</dict>
7948+
<dict>
7949+
<key>name</key>
7950+
<string>string.template.ts</string>
7951+
<key>begin</key>
7952+
<string>([_$[:alpha:]][_$[:alnum:]]*)?(`)</string>
7953+
<key>beginCaptures</key>
7954+
<dict>
7955+
<key>1</key>
7956+
<dict>
7957+
<key>name</key>
7958+
<string>entity.name.function.tagged-template.ts</string>
7959+
</dict>
7960+
<key>2</key>
7961+
<dict>
7962+
<key>name</key>
7963+
<string>punctuation.definition.string.template.begin.ts</string>
7964+
</dict>
7965+
</dict>
7966+
<key>end</key>
7967+
<string>`</string>
7968+
<key>endCaptures</key>
7969+
<dict>
7970+
<key>0</key>
7971+
<dict>
7972+
<key>name</key>
7973+
<string>punctuation.definition.string.template.end.ts</string>
7974+
</dict>
7975+
</dict>
7976+
<key>patterns</key>
7977+
<array>
7978+
<dict>
7979+
<key>include</key>
7980+
<string>#template-substitution-element</string>
7981+
</dict>
7982+
<dict>
7983+
<key>include</key>
7984+
<string>#string-character-escape</string>
7985+
</dict>
7986+
</array>
7987+
</dict>
7988+
</array>
7989+
</dict>
7990+
<key>template-call</key>
79297991
<dict>
79307992
<key>patterns</key>
79317993
<array>
@@ -7986,6 +8048,68 @@
79868048
</dict>
79878049
</array>
79888050
</dict>
8051+
</array>
8052+
</dict>
8053+
<key>template-substitution-element</key>
8054+
<dict>
8055+
<key>name</key>
8056+
<string>meta.template.expression.ts</string>
8057+
<key>begin</key>
8058+
<string>\$\{</string>
8059+
<key>beginCaptures</key>
8060+
<dict>
8061+
<key>0</key>
8062+
<dict>
8063+
<key>name</key>
8064+
<string>punctuation.definition.template-expression.begin.ts</string>
8065+
</dict>
8066+
</dict>
8067+
<key>end</key>
8068+
<string>\}</string>
8069+
<key>endCaptures</key>
8070+
<dict>
8071+
<key>0</key>
8072+
<dict>
8073+
<key>name</key>
8074+
<string>punctuation.definition.template-expression.end.ts</string>
8075+
</dict>
8076+
</dict>
8077+
<key>patterns</key>
8078+
<array>
8079+
<dict>
8080+
<key>include</key>
8081+
<string>#expression</string>
8082+
</dict>
8083+
</array>
8084+
<key>contentName</key>
8085+
<string>meta.embedded.line.ts</string>
8086+
</dict>
8087+
<key>type-string</key>
8088+
<dict>
8089+
<key>patterns</key>
8090+
<array>
8091+
<dict>
8092+
<key>include</key>
8093+
<string>#qstring-single</string>
8094+
</dict>
8095+
<dict>
8096+
<key>include</key>
8097+
<string>#qstring-double</string>
8098+
</dict>
8099+
<dict>
8100+
<key>include</key>
8101+
<string>#template-type</string>
8102+
</dict>
8103+
</array>
8104+
</dict>
8105+
<key>template-type</key>
8106+
<dict>
8107+
<key>patterns</key>
8108+
<array>
8109+
<dict>
8110+
<key>include</key>
8111+
<string>#template-call</string>
8112+
</dict>
79898113
<dict>
79908114
<key>name</key>
79918115
<string>string.template.ts</string>
@@ -8018,7 +8142,7 @@
80188142
<array>
80198143
<dict>
80208144
<key>include</key>
8021-
<string>#template-substitution-element</string>
8145+
<string>#template-type-substitution-element</string>
80228146
</dict>
80238147
<dict>
80248148
<key>include</key>
@@ -8028,7 +8152,7 @@
80288152
</dict>
80298153
</array>
80308154
</dict>
8031-
<key>template-substitution-element</key>
8155+
<key>template-type-substitution-element</key>
80328156
<dict>
80338157
<key>name</key>
80348158
<string>meta.template.expression.ts</string>
@@ -8056,7 +8180,7 @@
80568180
<array>
80578181
<dict>
80588182
<key>include</key>
8059-
<string>#expression</string>
8183+
<string>#type</string>
80608184
</dict>
80618185
</array>
80628186
<key>contentName</key>

0 commit comments

Comments
 (0)