From de80aefece3049ffd5986eef0a968d13e8c21f81 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 30 Oct 2018 00:49:11 -0500 Subject: [PATCH] fix single-arg async arrows when retainLines=true (#8868) --- .../babel-generator/src/generators/methods.js | 18 +++++++++++++++++- .../input.js | 11 +++++++++++ .../options.json | 3 +++ .../output.js | 11 +++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/input.js create mode 100644 packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/options.json create mode 100644 packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/output.js diff --git a/packages/babel-generator/src/generators/methods.js b/packages/babel-generator/src/generators/methods.js index 5dc17e065a20..9d9f68733380 100644 --- a/packages/babel-generator/src/generators/methods.js +++ b/packages/babel-generator/src/generators/methods.js @@ -111,7 +111,23 @@ export function ArrowFunctionExpression(node: Object) { t.isIdentifier(firstParam) && !hasTypes(node, firstParam) ) { - this.print(firstParam, node); + if ( + this.format.retainLines && + node.loc.start.line < node.body.loc.start.line + ) { + this.token("("); + if (firstParam.loc.start.line > node.loc.start.line) { + this.indent(); + this.print(firstParam, node); + this.dedent(); + this._catchUp("start", node.body.loc); + } else { + this.print(firstParam, node); + } + this.token(")"); + } else { + this.print(firstParam, node); + } } else { this._params(node); } diff --git a/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/input.js b/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/input.js new file mode 100644 index 000000000000..e409b79f575f --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/input.js @@ -0,0 +1,11 @@ +var fn = async ( + arg +) => {} + +async (x) +=> {} + +async x => {} + +async (x +) => {}; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/options.json b/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/options.json new file mode 100644 index 000000000000..97925bbcb61b --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/options.json @@ -0,0 +1,3 @@ +{ + "retainLines": true +} diff --git a/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/output.js b/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/output.js new file mode 100644 index 000000000000..6bb2ce5093e8 --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/single-arg-async-arrow-with-retainlines/output.js @@ -0,0 +1,11 @@ +var fn = async ( + arg +) => {}; + +async (x) => +{}; + +async x => {}; + +async (x) => +{}; \ No newline at end of file