From e4c5d9dcb381bc5db5669b9ac8f75dae7a9c5287 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Mon, 23 Nov 2015 20:01:43 -0800 Subject: [PATCH 1/2] Respect compact mode in spacing --- .../babel-generator/src/generators/expressions.js | 11 ++++++++--- packages/babel-generator/src/printer.js | 1 + .../test/fixtures/compact/assignment/actual.js | 2 ++ .../test/fixtures/compact/assignment/expected.js | 1 + .../fixtures/compact/binary-expressions/actual.js | 4 ++++ .../fixtures/compact/binary-expressions/expected.js | 1 + .../test/fixtures/compact/while/actual.js | 1 + .../test/fixtures/compact/while/expected.js | 1 + 8 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/compact/assignment/actual.js create mode 100644 packages/babel-generator/test/fixtures/compact/assignment/expected.js create mode 100644 packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js create mode 100644 packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js create mode 100644 packages/babel-generator/test/fixtures/compact/while/actual.js create mode 100644 packages/babel-generator/test/fixtures/compact/while/expected.js diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 01683fd9e0..f564f2ab7a 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -141,7 +141,9 @@ export function ExpressionStatement(node: Object) { export function AssignmentPattern(node: Object) { this.print(node.left, node); - this.push(" = "); + this.space(); + this.push("="); + this.space(); this.print(node.right, node); } @@ -158,7 +160,6 @@ export function AssignmentExpression(node: Object, parent: Object) { this.print(node.left, node); let spaces = !this.format.compact || node.operator === "in" || node.operator === "instanceof"; - spaces = true; // todo: https://github.com/babel/babel/issues/1835 if (spaces) this.push(" "); this.push(node.operator); @@ -168,7 +169,11 @@ export function AssignmentExpression(node: Object, parent: Object) { // http://javascript.spec.whatwg.org/#comment-syntax spaces = node.operator === "<" && t.isUnaryExpression(node.right, { prefix: true, operator: "!" }) && - t.isUnaryExpression(node.right.argument, { prefix: true, operator: "--" }); + t.isUnaryExpression(node.right.argument, { prefix: true, operator: "--" }) || + // Need spaces for operators of the same kind to avoid: `a+++b` + t.isUnaryExpression(node.right, { prefix: true, operator: node.operator }) || + t.isUpdateExpression(node.right, { prefix: true, operator: `${node.operator}${node.operator}` }); + } if (spaces) this.push(" "); diff --git a/packages/babel-generator/src/printer.js b/packages/babel-generator/src/printer.js index d964ac6736..33f15d2325 100644 --- a/packages/babel-generator/src/printer.js +++ b/packages/babel-generator/src/printer.js @@ -146,6 +146,7 @@ export default class Printer extends Buffer { printBlock(parent) { let node = parent.body; + if (!t.isEmptyStatement(node)) { this.space(); } diff --git a/packages/babel-generator/test/fixtures/compact/assignment/actual.js b/packages/babel-generator/test/fixtures/compact/assignment/actual.js new file mode 100644 index 0000000000..e42dbc54a5 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/assignment/actual.js @@ -0,0 +1,2 @@ +x = 1; +var { y = 1 } = obj; diff --git a/packages/babel-generator/test/fixtures/compact/assignment/expected.js b/packages/babel-generator/test/fixtures/compact/assignment/expected.js new file mode 100644 index 0000000000..8db440a0f9 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/assignment/expected.js @@ -0,0 +1 @@ +x=1;var {y=1}=obj; diff --git a/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js b/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js new file mode 100644 index 0000000000..bf66e42564 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js @@ -0,0 +1,4 @@ +1 * 1; +1 && 1; +1 + +1; +x + ++y; diff --git a/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js b/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js new file mode 100644 index 0000000000..169312ebfc --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js @@ -0,0 +1 @@ +1*1;1&&1;1+ +1;x+ ++y; diff --git a/packages/babel-generator/test/fixtures/compact/while/actual.js b/packages/babel-generator/test/fixtures/compact/while/actual.js new file mode 100644 index 0000000000..9032d78ce7 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/while/actual.js @@ -0,0 +1 @@ +while(true) x(); diff --git a/packages/babel-generator/test/fixtures/compact/while/expected.js b/packages/babel-generator/test/fixtures/compact/while/expected.js new file mode 100644 index 0000000000..fb2b8f3518 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/while/expected.js @@ -0,0 +1 @@ +while(true)x(); From e481c5b570341bc1e3c88d5a1df311edf0e2b6b1 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 24 Nov 2015 18:58:21 -0800 Subject: [PATCH 2/2] use + instead of template string --- packages/babel-generator/src/generators/expressions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index f564f2ab7a..ffe55eb3f1 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -172,7 +172,7 @@ export function AssignmentExpression(node: Object, parent: Object) { t.isUnaryExpression(node.right.argument, { prefix: true, operator: "--" }) || // Need spaces for operators of the same kind to avoid: `a+++b` t.isUnaryExpression(node.right, { prefix: true, operator: node.operator }) || - t.isUpdateExpression(node.right, { prefix: true, operator: `${node.operator}${node.operator}` }); + t.isUpdateExpression(node.right, { prefix: true, operator: node.operator + node.operator }); }