From 6abee425d3f3ea3cf1a83e726cfbe9a5f1085d1d Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Wed, 6 Jan 2016 15:59:39 -0800 Subject: [PATCH 1/2] Revert "`babel-types`: add `Binary` alias to `AssignmentExpression` definition (fixes T6887)" This was causing problems with parenthesizing assignment expression This reverts commit b5cf529d6b342b3dd8dd49c50cc9cd5fed4fc5a7. --- packages/babel-generator/src/generators/expressions.js | 4 +--- packages/babel-generator/src/node/parentheses.js | 4 ++-- packages/babel-types/src/definitions/core.js | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 2e39f6f070..b5d9ecb860 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -155,10 +155,8 @@ export function AssignmentPattern(node: Object) { export function AssignmentExpression(node: Object, parent: Object) { // Somewhere inside a for statement `init` node but doesn't usually // needs a paren except for `in` expressions: `for (a in b ? a : b;;)` - // and for `ObjectPattern`: `({ f } = { f: 2 };` let parens = this._inForStatementInit && node.operator === "in" && - !n.needsParens(node, parent) || - t.isObjectPattern(node.left); + !n.needsParens(node, parent); if (parens) { this.push("("); diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 6a02ba09c8..777bb6e519 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -66,7 +66,7 @@ export function Binary(node: Object, parent: Object): boolean { return true; } - if (t.isBinary(parent) && !t.isAssignmentExpression(parent)) { + if (t.isBinary(parent)) { let parentOp = parent.operator; let parentPos = PRECEDENCE[parentOp]; @@ -216,7 +216,7 @@ export function ConditionalExpression(node: Object, parent: Object): boolean { return true; } - if (t.isBinary(parent) && !t.isAssignmentExpression(parent)) { + if (t.isBinary(parent)) { return true; } diff --git a/packages/babel-types/src/definitions/core.js b/packages/babel-types/src/definitions/core.js index 89e5572c78..f817dd5da4 100644 --- a/packages/babel-types/src/definitions/core.js +++ b/packages/babel-types/src/definitions/core.js @@ -42,7 +42,7 @@ defineType("AssignmentExpression", { }, builder: ["operator", "left", "right"], visitor: ["left", "right"], - aliases: ["Binary", "Expression"] + aliases: ["Expression"] }); defineType("BinaryExpression", { From ec983b276eb010de789efb00cfa7b7a0138bebf5 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Wed, 6 Jan 2016 16:03:45 -0800 Subject: [PATCH 2/2] add assignment expression parentheses test --- .../test/fixtures/parentheses/assignment-expression/actual.js | 3 +++ .../fixtures/parentheses/assignment-expression/expected.js | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 packages/babel-generator/test/fixtures/parentheses/assignment-expression/actual.js create mode 100644 packages/babel-generator/test/fixtures/parentheses/assignment-expression/expected.js diff --git a/packages/babel-generator/test/fixtures/parentheses/assignment-expression/actual.js b/packages/babel-generator/test/fixtures/parentheses/assignment-expression/actual.js new file mode 100644 index 0000000000..f1b168c720 --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/assignment-expression/actual.js @@ -0,0 +1,3 @@ +1 + (a = 2); +1 + (a += 2); +a = a || (a = {}); diff --git a/packages/babel-generator/test/fixtures/parentheses/assignment-expression/expected.js b/packages/babel-generator/test/fixtures/parentheses/assignment-expression/expected.js new file mode 100644 index 0000000000..f1b168c720 --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/assignment-expression/expected.js @@ -0,0 +1,3 @@ +1 + (a = 2); +1 + (a += 2); +a = a || (a = {});