Skip to content

Commit d84f2b1

Browse files
committed
Fix string/number literals in interface method generic parameter default/extends
Fixes #1035
1 parent 4724f0e commit d84f2b1

7 files changed

+461
-89
lines changed

TypeScript.YAML-tmLanguage

+3-1
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ variables:
6969
lookBehindOfPossiblyMultilineArrow: (?<=[(=,]|=>|{{lookBehindReturn}})
7070
lookBehindOfObjectMemberPossiblyMultilineArrow: (?<=:)
7171
# Identifier start | matching braces | matching parenthesis | matching square brackets
72-
typeParamersStart: (((const\s+)?[_$[:alpha:]])|{{matchingBraces}}|{{matchingParenthesis}}|{{matchingBrackets}})
72+
typeParamersStart: (((const\s+)?[_$\'"[:alnum:]])|{{matchingBraces}}|{{matchingParenthesis}}|{{matchingBrackets}})
7373
typeParameters: (<\s*{{typeParamersStart}}([^=<>]|=[^<]|\<\s*{{typeParamersStart}}([^=<>]|=[^<]|\<\s*{{typeParamersStart}}([^=<>]|=[^<])*\>)*\>)*>\s*)
74+
# typeParamersStart2: (((const\s+)?[_$\'[:alpha:]])|{{matchingBraces}}|{{matchingParenthesis}}|{{matchingBrackets}})
75+
# typeParameters2: (<\s*{{typeParamersStart2}}([^=<>]|=[^<]|\<\s*{{typeParamersStart2}}([^=<>]|=[^<]|\<\s*{{typeParamersStart2}}([^=<>]|=[^<])*\>)*\>)*>\s*)
7476
# Identifier start | matching braces | matching parenthesis | matching square brackets | matching strings
7577
typeArgumentsStart: (((keyof|infer|typeof|readonly)\s+)|(({{identifier}}|{{matchingBraces}}|{{matchingParenthesis}}|{{matchingBrackets}}|{{quotedStrings}})(?=\s*([\<\>\,\.\[]|=>|&(?!&)|\|(?!\|)))))
7678
typeArgumentsInnerExpressionPart: '[^<>\(]|{{matchingParenthesis}}|(?<==)\>'

TypeScript.tmLanguage

+53-53
Large diffs are not rendered by default.

TypeScriptReact.tmLanguage

+35-35
Large diffs are not rendered by default.
+176
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
original file
2+
-----------------------------------
3+
let var1;
4+
5+
interface MyInterface {
6+
func1<T = Lowercase<'StringLiteral'>>(): T;
7+
func2<T = Lowercase<"StringLiteral">>(): T;
8+
func3<T = Lowercase<123>>(): T;
9+
}
10+
11+
let var2;
12+
13+
-----------------------------------
14+
15+
Grammar: TypeScript.tmLanguage
16+
-----------------------------------
17+
>let var1;
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 punctuation.terminator.statement.ts
26+
>
27+
^
28+
source.ts
29+
>interface MyInterface {
30+
^^^^^^^^^
31+
source.ts meta.interface.ts storage.type.interface.ts
32+
^
33+
source.ts meta.interface.ts
34+
^^^^^^^^^^^
35+
source.ts meta.interface.ts entity.name.type.interface.ts
36+
^
37+
source.ts meta.interface.ts
38+
^
39+
source.ts meta.interface.ts punctuation.definition.block.ts
40+
> func1<T = Lowercase<'StringLiteral'>>(): T;
41+
^^
42+
source.ts meta.interface.ts meta.method.declaration.ts
43+
^^^^^
44+
source.ts meta.interface.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
45+
^
46+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
47+
^
48+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts entity.name.type.ts
49+
^
50+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts
51+
^
52+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts keyword.operator.assignment.ts
53+
^
54+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts
55+
^^^^^^^^^
56+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts entity.name.type.ts
57+
^
58+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
59+
^
60+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.single.ts punctuation.definition.string.begin.ts
61+
^^^^^^^^^^^^^
62+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.single.ts
63+
^
64+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.single.ts punctuation.definition.string.end.ts
65+
^
66+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
67+
^
68+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
69+
^
70+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
71+
^
72+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
73+
^
74+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
75+
^
76+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts
77+
^
78+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts entity.name.type.ts
79+
^
80+
source.ts meta.interface.ts punctuation.terminator.statement.ts
81+
> func2<T = Lowercase<"StringLiteral">>(): T;
82+
^^
83+
source.ts meta.interface.ts meta.method.declaration.ts
84+
^^^^^
85+
source.ts meta.interface.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
86+
^
87+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
88+
^
89+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts entity.name.type.ts
90+
^
91+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts
92+
^
93+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts keyword.operator.assignment.ts
94+
^
95+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts
96+
^^^^^^^^^
97+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts entity.name.type.ts
98+
^
99+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
100+
^
101+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.begin.ts
102+
^^^^^^^^^^^^^
103+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.double.ts
104+
^
105+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts string.quoted.double.ts punctuation.definition.string.end.ts
106+
^
107+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
108+
^
109+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
110+
^
111+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
112+
^
113+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
114+
^
115+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
116+
^
117+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts
118+
^
119+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts entity.name.type.ts
120+
^
121+
source.ts meta.interface.ts punctuation.terminator.statement.ts
122+
> func3<T = Lowercase<123>>(): T;
123+
^^
124+
source.ts meta.interface.ts meta.method.declaration.ts
125+
^^^^^
126+
source.ts meta.interface.ts meta.method.declaration.ts meta.definition.method.ts entity.name.function.ts
127+
^
128+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
129+
^
130+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts entity.name.type.ts
131+
^
132+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts
133+
^
134+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts keyword.operator.assignment.ts
135+
^
136+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts
137+
^^^^^^^^^
138+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts entity.name.type.ts
139+
^
140+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
141+
^^^
142+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts constant.numeric.decimal.ts
143+
^
144+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
145+
^
146+
source.ts meta.interface.ts meta.method.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
147+
^
148+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
149+
^
150+
source.ts meta.interface.ts meta.method.declaration.ts meta.parameters.ts punctuation.definition.parameters.end.ts
151+
^
152+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts keyword.operator.type.annotation.ts
153+
^
154+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts
155+
^
156+
source.ts meta.interface.ts meta.method.declaration.ts meta.return.type.ts entity.name.type.ts
157+
^
158+
source.ts meta.interface.ts punctuation.terminator.statement.ts
159+
>}
160+
^
161+
source.ts meta.interface.ts punctuation.definition.block.ts
162+
>
163+
^
164+
source.ts
165+
>let var2;
166+
^^^
167+
source.ts meta.var.expr.ts storage.type.ts
168+
^
169+
source.ts meta.var.expr.ts
170+
^^^^
171+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts
172+
^
173+
source.ts punctuation.terminator.statement.ts
174+
>
175+
^
176+
source.ts

0 commit comments

Comments
 (0)