From 07df8515b9c89668d8f9a136727d059de19300dd Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Fri, 11 Dec 2015 18:04:16 -0800 Subject: [PATCH] Parenthesize object expression when it could end up at the start of an expression T6811 --- packages/babel-generator/src/node/parentheses.js | 7 +++++++ .../test/fixtures/parentheses/object/actual.js | 2 ++ .../test/fixtures/parentheses/object/expected.js | 2 ++ 3 files changed, 11 insertions(+) create mode 100644 packages/babel-generator/test/fixtures/parentheses/object/actual.js create mode 100644 packages/babel-generator/test/fixtures/parentheses/object/expected.js diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 4df8a56bf5..0092e59973 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -55,6 +55,13 @@ export function ObjectExpression(node: Object, parent: Object): boolean { return true; } + if ((t.isBinaryExpression(parent) || t.isLogicalExpression(parent)) && parent.left === node) { + // We'd need to check that the parent's parent is an ExpressionStatement. But this + // code doesn't make any sense to begin with and should be rare. + // `({}) === foo` + return true; + } + return false; } diff --git a/packages/babel-generator/test/fixtures/parentheses/object/actual.js b/packages/babel-generator/test/fixtures/parentheses/object/actual.js new file mode 100644 index 0000000000..1675763aab --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/object/actual.js @@ -0,0 +1,2 @@ +({}) === foo; +({}) && foo; diff --git a/packages/babel-generator/test/fixtures/parentheses/object/expected.js b/packages/babel-generator/test/fixtures/parentheses/object/expected.js new file mode 100644 index 0000000000..1675763aab --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/object/expected.js @@ -0,0 +1,2 @@ +({}) === foo; +({}) && foo;