From 6f338b9936566786cc192e80754a72467f6d53f6 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Fri, 20 Jan 2023 02:41:26 +0200 Subject: [PATCH] fix(52274): Suggestion code action adds another JSDoc (#52276) --- .../codefixes/fixUnmatchedParameter.ts | 12 ++++++++---- .../codeFixDeleteUnmatchedParameter5.ts | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 tests/cases/fourslash/codeFixDeleteUnmatchedParameter5.ts diff --git a/src/services/codefixes/fixUnmatchedParameter.ts b/src/services/codefixes/fixUnmatchedParameter.ts index bdb4bbbb28d..0bf1d4195e0 100644 --- a/src/services/codefixes/fixUnmatchedParameter.ts +++ b/src/services/codefixes/fixUnmatchedParameter.ts @@ -7,8 +7,10 @@ import { factory, firstDefined, getHostSignatureFromJSDoc, + getJSDocHost, getJSDocTags, getTokenAtPosition, + HasJSDoc, Identifier, isIdentifier, isJSDocParameterTag, @@ -69,9 +71,9 @@ registerCodeFix({ } }); -function getDeleteAction(context: CodeFixContext, { name, signature, jsDocParameterTag }: Info) { +function getDeleteAction(context: CodeFixContext, { name, jsDocHost, jsDocParameterTag }: Info) { const changes = textChanges.ChangeTracker.with(context, changeTracker => - changeTracker.filterJSDocTags(context.sourceFile, signature, t => t !== jsDocParameterTag)); + changeTracker.filterJSDocTags(context.sourceFile, jsDocHost, t => t !== jsDocParameterTag)); return createCodeFixAction( deleteUnmatchedParameter, changes, @@ -113,6 +115,7 @@ function getRenameAction(context: CodeFixContext, { name, signature, jsDocParame } interface Info { + readonly jsDocHost: HasJSDoc; readonly signature: SignatureDeclaration; readonly jsDocParameterTag: JSDocParameterTag; readonly name: Identifier; @@ -122,9 +125,10 @@ function getInfo(sourceFile: SourceFile, pos: number): Info | undefined { const token = getTokenAtPosition(sourceFile, pos); if (token.parent && isJSDocParameterTag(token.parent) && isIdentifier(token.parent.name)) { const jsDocParameterTag = token.parent; + const jsDocHost = getJSDocHost(jsDocParameterTag); const signature = getHostSignatureFromJSDoc(jsDocParameterTag); - if (signature) { - return { signature, name: token.parent.name, jsDocParameterTag }; + if (jsDocHost && signature) { + return { jsDocHost, signature, name: token.parent.name, jsDocParameterTag }; } } return undefined; diff --git a/tests/cases/fourslash/codeFixDeleteUnmatchedParameter5.ts b/tests/cases/fourslash/codeFixDeleteUnmatchedParameter5.ts new file mode 100644 index 00000000000..efdf8734325 --- /dev/null +++ b/tests/cases/fourslash/codeFixDeleteUnmatchedParameter5.ts @@ -0,0 +1,18 @@ +/// + +// @filename: a.ts +/////** +//// * @param {number} n +//// * @returns +//// */ +////export const foo = (z: number) => 0; + +verify.codeFix({ + description: [ts.Diagnostics.Delete_unused_param_tag_0.message, "n"], + index: 0, + newFileContent: +`/** + * @returns + */ +export const foo = (z: number) => 0;` +});