diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 01683fd9e0..ffe55eb3f1 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();