From 007ef5cdbb1fe4b08aea3625f5b83a35c7545bba Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Mon, 14 Dec 2015 13:36:52 -0800 Subject: [PATCH] Use the leftMost from the right to check if we need spaces in BinaryExpressions --- .../babel-generator/src/generators/expressions.js | 13 +++++++------ .../fixtures/compact/binary-expressions/actual.js | 4 +++- .../fixtures/compact/binary-expressions/expected.js | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 097ad189c1..599f77bc6b 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -174,13 +174,14 @@ 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: "--" }) || - // 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.isBinaryExpression(node.right) && - t.isUnaryExpression(getLeftMost(node.right), { prefix: true, operator: node.operator })); + t.isUnaryExpression(node.right.argument, { prefix: true, operator: "--" }); + // Need spaces for operators of the same kind to avoid: `a+++b` + if (!spaces) { + let right = getLeftMost(node.right); + spaces = t.isUnaryExpression(right, { prefix: true, operator: node.operator }) || + t.isUpdateExpression(right, { prefix: true, operator: node.operator + node.operator }); + } } if (spaces) this.push(" "); 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 c987e7a436..eb37eaed00 100644 --- a/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js +++ b/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js @@ -7,4 +7,6 @@ a + +b * 2 * 2 * 2; a - -b; 1 + -b; 1 - --b; -a - -b * 2 +a - -b * 2; +1 - (--t) * t; + 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 a22f5f04c3..8a2186473a 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;a+ +b*2;a+ +b*2*2*2;a- -b;1+-b;1- --b;a- -b*2; +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;1- --t*t;