Skip to content

Commit 8418c9a

Browse files
committed
fix(26141): show completions for string parenthesized types
1 parent 191f4f6 commit 8418c9a

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

src/services/stringCompletions.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,14 @@ namespace ts.Completions.StringCompletions {
114114
switch (parent.parent.kind) {
115115
case SyntaxKind.TypeReference:
116116
return { kind: StringLiteralCompletionKind.Types, types: getStringLiteralTypes(typeChecker.getTypeArgumentConstraint(parent as LiteralTypeNode)), isNewIdentifier: false };
117+
case SyntaxKind.ParenthesizedType: {
118+
const typeNode = findAncestor(parent.parent, n => !isParenthesizedTypeNode(n.parent)) as ParenthesizedTypeNode;
119+
const typeArguments = (typeNode.parent as NodeWithTypeArguments).typeArguments;
120+
if (typeArguments && find(typeArguments, typeArgument => typeArgument === typeNode)) {
121+
return { kind: StringLiteralCompletionKind.Types, types: getStringLiteralTypes(typeChecker.getTypeArgumentConstraint(typeNode)), isNewIdentifier: false };
122+
}
123+
return undefined;
124+
}
117125
case SyntaxKind.IndexedAccessType:
118126
// Get all apparent property names
119127
// i.e. interface Foo {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
////type T1 = "a" | "b" | "c";
4+
////type T2<T extends T1> = {};
5+
////
6+
////type T3 = T2<"[|/*1*/|]">;
7+
////type T4 = T2<("[|/*2*/|]")>;
8+
////type T5 = T2<(("[|/*3*/|]"))>;
9+
////type T6 = T2<((("[|/*4*/|]")))>;
10+
////
11+
////type T7<P extends T1, K extends T1> = {};
12+
////type T8 = T7<"a", ((("[|/*5*/|]")))>;
13+
14+
const [r1, r2, r3, r4, r5] = test.ranges();
15+
verify.completions(
16+
{
17+
marker: "1",
18+
exact: [
19+
{ name: "a", replacementSpan: r1 },
20+
{ name: "b", replacementSpan: r1 },
21+
{ name: "c", replacementSpan: r1 },
22+
]
23+
},
24+
{
25+
marker: "2",
26+
exact: [
27+
{ name: "a", replacementSpan: r2 },
28+
{ name: "b", replacementSpan: r2 },
29+
{ name: "c", replacementSpan: r2 },
30+
]
31+
},
32+
{
33+
marker: "3",
34+
exact: [
35+
{ name: "a", replacementSpan: r3 },
36+
{ name: "b", replacementSpan: r3 },
37+
{ name: "c", replacementSpan: r3 },
38+
]
39+
},
40+
{
41+
marker: "4",
42+
exact: [
43+
{ name: "a", replacementSpan: r4 },
44+
{ name: "b", replacementSpan: r4 },
45+
{ name: "c", replacementSpan: r4 },
46+
]
47+
},
48+
{
49+
marker: "5",
50+
exact: [
51+
{ name: "a", replacementSpan: r5 },
52+
{ name: "b", replacementSpan: r5 },
53+
{ name: "c", replacementSpan: r5 },
54+
]
55+
}
56+
);

0 commit comments

Comments
 (0)