From 4285d5fad81839bdcfe62906f83bef5def5c9623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 8 Nov 2022 17:45:06 +0100 Subject: [PATCH] Fix printing of comments before `=>` (#15160) Fixes https://github.com/babel/babel/issues/15161 --- .../babel-generator/src/generators/methods.ts | 5 ++++- .../test/fixtures/regression/15161/input.js | 3 +++ .../fixtures/regression/15161/options.json | 3 +++ .../test/fixtures/regression/15161/output.js | 3 +++ packages/babel-generator/test/index.js | 19 ++++++++++++++++++- 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/regression/15161/input.js create mode 100644 packages/babel-generator/test/fixtures/regression/15161/options.json create mode 100644 packages/babel-generator/test/fixtures/regression/15161/output.js diff --git a/packages/babel-generator/src/generators/methods.ts b/packages/babel-generator/src/generators/methods.ts index 5d30ac98453d..e8a94da32898 100644 --- a/packages/babel-generator/src/generators/methods.ts +++ b/packages/babel-generator/src/generators/methods.ts @@ -11,7 +11,10 @@ export function _params( this._parameters(node.params, node); this.token(")"); - this.print(node.returnType, node, node.type === "ArrowFunctionExpression"); + const noLineTerminator = node.type === "ArrowFunctionExpression"; + this.print(node.returnType, node, noLineTerminator); + + this._noLineTerminator = noLineTerminator; } export function _parameters( diff --git a/packages/babel-generator/test/fixtures/regression/15161/input.js b/packages/babel-generator/test/fixtures/regression/15161/input.js new file mode 100644 index 000000000000..7e0951ac0169 --- /dev/null +++ b/packages/babel-generator/test/fixtures/regression/15161/input.js @@ -0,0 +1,3 @@ +var test = (/* placeholder */) => { + /* Unused */ +} diff --git a/packages/babel-generator/test/fixtures/regression/15161/options.json b/packages/babel-generator/test/fixtures/regression/15161/options.json new file mode 100644 index 000000000000..893844304ade --- /dev/null +++ b/packages/babel-generator/test/fixtures/regression/15161/options.json @@ -0,0 +1,3 @@ +{ + "comments": false +} diff --git a/packages/babel-generator/test/fixtures/regression/15161/output.js b/packages/babel-generator/test/fixtures/regression/15161/output.js new file mode 100644 index 000000000000..ef5f61e62396 --- /dev/null +++ b/packages/babel-generator/test/fixtures/regression/15161/output.js @@ -0,0 +1,3 @@ +var test = ( +) => { +}; \ No newline at end of file diff --git a/packages/babel-generator/test/index.js b/packages/babel-generator/test/index.js index 913325f21df5..a5493e1ee858 100644 --- a/packages/babel-generator/test/index.js +++ b/packages/babel-generator/test/index.js @@ -1151,7 +1151,7 @@ describe("programmatic generation", function () { expect(generate(expr).code).toMatchInlineSnapshot(`"1 + 2 /*foo*/"`); }); - it("comment skipped because of newlines", () => { + it("comment skipped in arrow function because of newlines", () => { const arrow = t.arrowFunctionExpression( [t.identifier("x"), t.identifier("y")], t.identifier("z"), @@ -1166,6 +1166,23 @@ describe("programmatic generation", function () { line*/" `); }); + + it("comment in arrow function with return type", () => { + const arrow = t.arrowFunctionExpression( + [t.identifier("x"), t.identifier("y")], + t.identifier("z"), + ); + arrow.returnType = t.tsTypeAnnotation(t.tsAnyKeyword()); + arrow.returnType.trailingComments = [ + { type: "CommentBlock", value: "foo" }, + // This comment is dropped. There is no way to safely print it + // as a trailingComment of the return type. + { type: "CommentBlock", value: "new\nline" }, + ]; + expect(generate(arrow).code).toMatchInlineSnapshot( + `"(x, y): any /*foo*/ => z"`, + ); + }); }); });