From f79b471b76e808bb8f814cddcdefea0d5c349515 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 18 May 2021 07:46:48 +0300 Subject: [PATCH] fix(43298): copy comments on converting from arrow function to anonymous function --- ...onvertArrowFunctionOrFunctionExpression.ts | 6 +++++- ...FunctionExpression_ToAnonymous_Comment1.ts | 19 +++++++++++++++++++ ...FunctionExpression_ToAnonymous_Comment2.ts | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment1.ts create mode 100644 tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment2.ts diff --git a/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts b/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts index 6987fdd491911..75cf29f9d79fe 100644 --- a/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts +++ b/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts @@ -177,7 +177,11 @@ namespace ts.refactor.convertArrowFunctionOrFunctionExpression { function convertToBlock(body: ConciseBody): Block { if (isExpression(body)) { - return factory.createBlock([factory.createReturnStatement(body)], /* multiLine */ true); + const returnStatement = factory.createReturnStatement(body); + const file = body.getSourceFile(); + suppressLeadingAndTrailingTrivia(returnStatement); + copyTrailingAsLeadingComments(body, returnStatement, file, /* commentKind */ undefined, /* hasTrailingNewLine */ true); + return factory.createBlock([returnStatement], /* multiLine */ true); } else { return body; diff --git a/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment1.ts b/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment1.ts new file mode 100644 index 0000000000000..2acda7909b52a --- /dev/null +++ b/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment1.ts @@ -0,0 +1,19 @@ +/// + +////const foo = /*a*/()/*b*/ => /** +//// * comment +//// */ +////1 + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Convert arrow function or function expression", + actionName: "Convert to anonymous function", + actionDescription: "Convert to anonymous function", + newContent: `const foo = function() { + /** + * comment + */ + return 1; +}` +}); diff --git a/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment2.ts b/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment2.ts new file mode 100644 index 0000000000000..8790718d61b13 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_ToAnonymous_Comment2.ts @@ -0,0 +1,15 @@ +/// + +////const foo = /*a*/()/*b*/ => // comment +////1 + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Convert arrow function or function expression", + actionName: "Convert to anonymous function", + actionDescription: "Convert to anonymous function", + newContent: `const foo = function() { + // comment + return 1; +}` +});