From c5b539dcd50407d261d125f864af4adf26bb3d86 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 21 Mar 2023 22:12:38 +0200 Subject: [PATCH] fix(53372): TypeScript cannot auto-complete keyword extends (#53418) --- src/services/completions.ts | 7 ++++--- tests/cases/fourslash/extendsKeywordCompletion.ts | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/extendsKeywordCompletion.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index f3a8e5f65a7..bbdf67bb2de 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -165,6 +165,7 @@ import { isInJSFile, isInRightSideOfInternalImportEqualsDeclaration, isInString, + isInterfaceDeclaration, isIntersectionTypeNode, isJSDoc, isJSDocAugmentsTag, @@ -4263,9 +4264,9 @@ function getCompletionData( return isDeclarationName(contextToken) && !isShorthandPropertyAssignment(contextToken.parent) && !isJsxAttribute(contextToken.parent) - // Don't block completions if we're in `class C /**/`, because we're *past* the end of the identifier and might want to complete `extends`. - // If `contextToken !== previousToken`, this is `class C ex/**/`. - && !(isClassLike(contextToken.parent) && (contextToken !== previousToken || position > previousToken.end)); + // Don't block completions if we're in `class C /**/` or `interface I /**/`, because we're *past* the end of the identifier and might want to complete `extends`. + // If `contextToken !== previousToken`, this is `class C ex/**/ or `interface I ex/**/``. + && !((isClassLike(contextToken.parent) || isInterfaceDeclaration(contextToken.parent)) && (contextToken !== previousToken || position > previousToken.end)); } function isPreviousPropertyDeclarationTerminated(contextToken: Node, position: number) { diff --git a/tests/cases/fourslash/extendsKeywordCompletion.ts b/tests/cases/fourslash/extendsKeywordCompletion.ts new file mode 100644 index 00000000000..a0334dfc5db --- /dev/null +++ b/tests/cases/fourslash/extendsKeywordCompletion.ts @@ -0,0 +1,8 @@ +/// + +////export interface B ex/**/ + +verify.completions({ + marker: "", + includes: [{ name: "extends", sortText: completion.SortText.GlobalsOrKeywords }] +});