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"]) },
+);