From f1904a93f5ccfbd69b436d68795e94c3525ee33d Mon Sep 17 00:00:00 2001 From: kingwl <805037171@163.com> Date: Mon, 16 Oct 2017 15:50:04 +0800 Subject: [PATCH] fix completions for string literal types with template string (#19162) --- src/services/completions.ts | 4 ++-- ...rStringLiteralTypeWithNoSubstitutionTemplateLiteral.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/completionListAfterStringLiteralTypeWithNoSubstitutionTemplateLiteral.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 3c233f4dbe8..f1f37e46356 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -213,7 +213,7 @@ namespace ts.Completions { function getStringLiteralCompletionEntries(sourceFile: SourceFile, position: number, typeChecker: TypeChecker, compilerOptions: CompilerOptions, host: LanguageServiceHost, log: Log): CompletionInfo | undefined { const node = findPrecedingToken(position, sourceFile); - if (!node || node.kind !== SyntaxKind.StringLiteral) { + if (!node || (node.kind !== SyntaxKind.StringLiteral && node.kind !== SyntaxKind.NoSubstitutionTemplateLiteral)) { return undefined; } @@ -278,7 +278,7 @@ namespace ts.Completions { // Get completion for string literal from string literal type // i.e. var x: "hi" | "hello" = "/*completion position*/" - return getStringLiteralCompletionEntriesFromType(typeChecker.getContextualType(node), typeChecker); + return getStringLiteralCompletionEntriesFromType(typeChecker.getContextualType(node), typeChecker); } } diff --git a/tests/cases/fourslash/completionListAfterStringLiteralTypeWithNoSubstitutionTemplateLiteral.ts b/tests/cases/fourslash/completionListAfterStringLiteralTypeWithNoSubstitutionTemplateLiteral.ts new file mode 100644 index 00000000000..c5deac5123e --- /dev/null +++ b/tests/cases/fourslash/completionListAfterStringLiteralTypeWithNoSubstitutionTemplateLiteral.ts @@ -0,0 +1,8 @@ +/// + +////let count: 'one' | 'two'; +////count = `/**/` + +goTo.marker(); +verify.completionListContains('one'); +verify.completionListContains('two');