From e087992134c164cfd665646a655688bf5a824f0f Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Fri, 9 Dec 2022 03:10:00 +0200 Subject: [PATCH] feat(47977): show completion in jsdoc extends/implements tags (#51028) --- src/services/completions.ts | 8 +++++++- tests/cases/fourslash/jsdocExtendsTagCompletion.ts | 8 ++++++++ tests/cases/fourslash/jsdocImplementsTagCompletion.ts | 8 ++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/jsdocExtendsTagCompletion.ts create mode 100644 tests/cases/fourslash/jsdocImplementsTagCompletion.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 68ed11c1c26..210524b95dd 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -56,6 +56,7 @@ import { every, ExportKind, Expression, + ExpressionWithTypeArguments, factory, filter, find, @@ -167,6 +168,8 @@ import { isInString, isIntersectionTypeNode, isJSDoc, + isJSDocAugmentsTag, + isJSDocImplementsTag, isJSDocParameterTag, isJSDocTag, isJSDocTemplateTag, @@ -2967,11 +2970,14 @@ function getCompletionData( } } - function tryGetTypeExpressionFromTag(tag: JSDocTag): JSDocTypeExpression | undefined { + function tryGetTypeExpressionFromTag(tag: JSDocTag): JSDocTypeExpression | ExpressionWithTypeArguments | undefined { if (isTagWithTypeExpression(tag)) { const typeExpression = isJSDocTemplateTag(tag) ? tag.constraint : tag.typeExpression; return typeExpression && typeExpression.kind === SyntaxKind.JSDocTypeExpression ? typeExpression : undefined; } + if (isJSDocAugmentsTag(tag) || isJSDocImplementsTag(tag)) { + return tag.class; + } return undefined; } diff --git a/tests/cases/fourslash/jsdocExtendsTagCompletion.ts b/tests/cases/fourslash/jsdocExtendsTagCompletion.ts new file mode 100644 index 00000000000..1af4d0e24cf --- /dev/null +++ b/tests/cases/fourslash/jsdocExtendsTagCompletion.ts @@ -0,0 +1,8 @@ +/// + +/////** @extends {/**/} */ +////class A {} + +verify.completions( + { marker: "", exact: completion.globalTypesPlus(["A"]) }, +); diff --git a/tests/cases/fourslash/jsdocImplementsTagCompletion.ts b/tests/cases/fourslash/jsdocImplementsTagCompletion.ts new file mode 100644 index 00000000000..4407dfb3177 --- /dev/null +++ b/tests/cases/fourslash/jsdocImplementsTagCompletion.ts @@ -0,0 +1,8 @@ +/// + +/////** @implements {/**/} */ +////class A {} + +verify.completions( + { marker: "", exact: completion.globalTypesPlus(["A"]) }, +);