diff --git a/src/services/codefixes/fixMissingTypeAnnotationOnExports.ts b/src/services/codefixes/fixMissingTypeAnnotationOnExports.ts index a82ccb01f00ff..c38894bfb5c80 100644 --- a/src/services/codefixes/fixMissingTypeAnnotationOnExports.ts +++ b/src/services/codefixes/fixMissingTypeAnnotationOnExports.ts @@ -36,6 +36,7 @@ import { factory, FileTextChanges, findAncestor, + forEachChild, FunctionDeclaration, GeneratedIdentifierFlags, getEmitScriptTarget, @@ -1097,6 +1098,11 @@ function withContext( return emptyInferenceResult; } + function stripCommentsFromNode(node: Node): void { + setEmitFlags(node, EmitFlags.NoComments); + forEachChild(node, stripCommentsFromNode); + } + function typeToTypeNode(type: Type, enclosingDeclaration: Node, flags = NodeBuilderFlags.None): TypeNode | undefined { let isTruncated = false; const minimizedTypeNode = typeToMinimizedReferenceType(typeChecker, type, enclosingDeclaration, declarationEmitNodeBuilderFlags | flags, declarationEmitInternalNodeBuilderFlags, { @@ -1112,6 +1118,11 @@ function withContext( return undefined; } const result = typeNodeToAutoImportableTypeNode(minimizedTypeNode, importAdder, scriptTarget); + + if (result) { + stripCommentsFromNode(result); + } + return isTruncated ? factory.createKeywordTypeNode(SyntaxKind.AnyKeyword) : result; } diff --git a/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports61-remove-duplicate-comments.ts b/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports61-remove-duplicate-comments.ts new file mode 100644 index 0000000000000..d038a1b139958 --- /dev/null +++ b/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports61-remove-duplicate-comments.ts @@ -0,0 +1,38 @@ +/// + +// @isolatedDeclarations: true +// @declaration: true + +//// export function f() { +//// const o = /** before */ { /* inline post-{ */ // end line post-{ +//// // document first type +//// /* inline before */ x /* inline pre-colon */ : /* inline pre-type */ 5 /* inline post-type */ , // after comma1 +//// // document second type +//// /** 2 before */ y : 'str' /** 2 after */, //after comma2 +//// // pre-closing +//// } /** after */; +//// return o; +//// } + +verify.codeFix({ + description: `Add return type '{ /* inline post-{ */ // end line post-{ +x: number; // after comma1 +y: string; }'`, + index: 0, + newFileContent: +`export function f(): { + x: number; + y: string; +} { + const o = /** before */ { /* inline post-{ */ // end line post-{ + // document first type + /* inline before */ x /* inline pre-colon */ : /* inline pre-type */ 5 /* inline post-type */ , // after comma1 + // document second type + /** 2 before */ y : 'str' /** 2 after */, //after comma2 + // pre-closing + } /** after */; + return o; +}`, +}); + +