diff --git a/packages/babel-generator/src/printer.ts b/packages/babel-generator/src/printer.ts index a02c59b379b9..df336864eff2 100644 --- a/packages/babel-generator/src/printer.ts +++ b/packages/babel-generator/src/printer.ts @@ -1036,6 +1036,14 @@ class Printer { let val; if (isBlockComment) { + const { _parenPushNewlineState } = this; + if ( + _parenPushNewlineState?.printed === false && + HAS_NEWLINE.test(comment.value) + ) { + this.token("("); + _parenPushNewlineState.printed = true; + } val = `/*${comment.value}*/`; if (this.format.indent.adjustMultilineComment) { const offset = comment.loc?.start.column; diff --git a/packages/babel-generator/test/index.js b/packages/babel-generator/test/index.js index 021f7de6887b..1508bb101668 100644 --- a/packages/babel-generator/test/index.js +++ b/packages/babel-generator/test/index.js @@ -1512,6 +1512,32 @@ describe("programmatic generation", function () { );" `); }); + + it("multi-line leading comment after return compact", () => { + const val = t.identifier("val"); + val.leadingComments = [{ type: "CommentBlock", value: "new\nline" }]; + expect( + generate(t.returnStatement(val), { + compact: true, + }).code, + ).toMatchInlineSnapshot(` + "return(/*new + line*/val);" + `); + }); + + it("multi-line leading comment after return concise", () => { + const val = t.identifier("val"); + val.leadingComments = [{ type: "CommentBlock", value: "new\nline" }]; + expect( + generate(t.returnStatement(val), { + concise: true, + }).code, + ).toMatchInlineSnapshot(` + "return (/*new + line*/ val );" + `); + }); }); });