From 54a2a47030f1ed0af654185fdc5bf56e50858023 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 1 Dec 2015 10:37:58 -0800 Subject: [PATCH] Fix spacing in binary expression when right is a binary expression and has a unary on the left --- .../babel-generator/src/generators/expressions.js | 11 ++++++++++- .../fixtures/compact/binary-expressions/actual.js | 2 ++ .../fixtures/compact/binary-expressions/expected.js | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) 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..1f6981f34e 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,5 @@ 1 && 1; 1 + +1; x + ++y; +(a+(+b)*2); +a + + b * 2 * 2 * 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..d4df4b13e1 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;