From 54a2a47030f1ed0af654185fdc5bf56e50858023 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 1 Dec 2015 10:37:58 -0800 Subject: [PATCH 1/2] 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; From 2efb67782239ab9bac551d6b7611ae2a18278a90 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 1 Dec 2015 10:47:25 -0800 Subject: [PATCH 2/2] Add test cases with spaces --- .../test/fixtures/compact/binary-expressions/actual.js | 6 +++++- .../test/fixtures/compact/binary-expressions/expected.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) 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 1f6981f34e..c987e7a436 100644 --- a/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js +++ b/packages/babel-generator/test/fixtures/compact/binary-expressions/actual.js @@ -3,4 +3,8 @@ 1 + +1; x + ++y; (a+(+b)*2); -a + + b * 2 * 2 * 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 d4df4b13e1..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;a+ +b*2;a+ +b*2*2*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;