diff --git a/packages/babel-generator/src/printer.ts b/packages/babel-generator/src/printer.ts index 491e096033b3..b5c37f6b5b58 100644 --- a/packages/babel-generator/src/printer.ts +++ b/packages/babel-generator/src/printer.ts @@ -130,11 +130,6 @@ class Printer { _indentInnerComments: boolean = true; generate(ast: t.Node) { - // Avoid inserting unexpected blank lines at the beginning and in the middle. - if (this.format.retainLines && ast.loc) { - this._buf._position.line = ast.loc.start.line; - } - this.print(ast); this._maybeAddAuxComment(); diff --git a/packages/babel-generator/test/index.js b/packages/babel-generator/test/index.js index b5816f24b710..0ba2219eb285 100644 --- a/packages/babel-generator/test/index.js +++ b/packages/babel-generator/test/index.js @@ -1047,6 +1047,28 @@ describe("programmatic generation", function () { expect(output).toBe("() => void"); }); + it("generate a child node with retainLines", () => { + const node = parse("a;\n\nexpect(a).toMatchInlineSnapshot(`[1, 2]`\n);") + .program.body[1].expression; + + expect(node.type).toBe("CallExpression"); + + expect(generate(node, { retainLines: true }).code).toMatchInlineSnapshot(` + " + + expect(a).toMatchInlineSnapshot(\`[1, 2]\` + )" + `); + + node.loc.end.line = node.loc.start.line; + + expect(generate(node, { retainLines: true }).code).toMatchInlineSnapshot(` + " + + expect(a).toMatchInlineSnapshot(\`[1, 2]\`)" + `); + }); + describe("directives", function () { it("preserves escapes", function () { const directive = t.directive(