From 372c7d9b0c7e2fb3a9d027e2ab4c069e2fa30b9a Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 26 Oct 2018 14:09:42 -0700 Subject: [PATCH] infer from usage JSDoc:Don't emit nested comments (#28161) * infer from usage JSDoc:Don't emit nested comments Previously, the trivia on a parameter name would show up inside the emitted JSDoc comment. If the trivia contained a C-style comment, the emitted JSDoc comment would be invalid. For example: ```js function call(callback /*oh no*/) { return callback(this) } ``` Emitted this comment: ```js /** * @param {(arg0: any) => void} callback /*oh no*/ */ ``` * Remove misleading comment used for debugging. --- src/services/codefixes/inferFromUsage.ts | 4 +++- ...eFixInferFromUsageCommentAfterParameter.ts | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixInferFromUsageCommentAfterParameter.ts diff --git a/src/services/codefixes/inferFromUsage.ts b/src/services/codefixes/inferFromUsage.ts index 2055bbf3b31..bc324ac9e24 100644 --- a/src/services/codefixes/inferFromUsage.ts +++ b/src/services/codefixes/inferFromUsage.ts @@ -219,7 +219,9 @@ namespace ts.codefix { if (param.initializer || getJSDocType(param) || !isIdentifier(param.name)) return; const typeNode = inference.type && getTypeNodeIfAccessible(inference.type, param, program, host); - return typeNode && createJSDocParamTag(param.name, !!inference.isOptional, createJSDocTypeExpression(typeNode), ""); + const name = getSynthesizedClone(param.name); + setEmitFlags(name, EmitFlags.NoComments | EmitFlags.NoNestedComments); + return typeNode && createJSDocParamTag(name, !!inference.isOptional, createJSDocTypeExpression(typeNode), ""); }); addJSDocTags(changes, sourceFile, signature, paramTags); } diff --git a/tests/cases/fourslash/codeFixInferFromUsageCommentAfterParameter.ts b/tests/cases/fourslash/codeFixInferFromUsageCommentAfterParameter.ts new file mode 100644 index 00000000000..b46600d927f --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageCommentAfterParameter.ts @@ -0,0 +1,24 @@ +/// + +// @allowJs: true +// @checkJs: true +// @noEmit: true +// @noImplicitAny: true +// @Filename: important.js + + +////function coll(callback /*, name1, name2, ... */) { +//// return callback(this); +////} + +verify.codeFix({ + description: "Infer parameter types from usage", + index: 2, + newFileContent: +`/** + * @param {(arg0: any) => void} callback + */ +function coll(callback /*, name1, name2, ... */) { + return callback(this); +}`, +});