diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index ffe55eb3f1..12ab9f195b 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -172,7 +172,9 @@ 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 }) || + (t.isBinaryExpression(node.right) && + t.isUnaryExpression(getLeftMost(node.right), { prefix: true, operator: node.operator })); } @@ -230,3 +232,10 @@ export function MetaProperty(node: Object) { this.push("."); this.print(node.property, node); } + +function getLeftMost(binaryExpr) { + if (!t.isBinaryExpression(binaryExpr)) { + return binaryExpr; + } + return getLeftMost(binaryExpr.left); +} diff --git a/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js b/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js index bf66e42564..c987e7a436 100644 --- a/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js +++ b/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js @@ -2,3 +2,9 @@ 1 && 1; 1 + +1; x + ++y; +(a+(+b)*2); +a + +b * 2 * 2 * 2; +a - -b; +1 + -b; +1 - --b; +a - -b * 2 diff --git a/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js b/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js index 169312ebfc..a22f5f04c3 100644 --- a/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js +++ b/packages/babel-generator/test/fixtures/compact/binary-expressions/expected.js @@ -1 +1 @@ -1*1;1&&1;1+ +1;x+ ++y; +1*1;1&&1;1+ +1;x+ ++y;a+ +b*2;a+ +b*2*2*2;a- -b;1+-b;1- --b;a- -b*2;