diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 3b6d1d6e1c..4f488956e7 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -154,7 +154,15 @@ export function ClassExpression(node: Object, parent: Object): boolean { } export function UnaryLike(node: Object, parent: Object): boolean { - return t.isMemberExpression(parent) && parent.object === node; + if (t.isMemberExpression(parent, { object: node })) { + return true; + } + + if (t.isCallExpression(parent, { callee: node }) || t.isNewExpression(parent, { callee: node })) { + return true; + } + + return false; } export function FunctionExpression(node: Object, parent: Object): boolean { @@ -172,17 +180,7 @@ export function ArrowFunctionExpression(node: Object, parent: Object): boolean { return true; } - // (function test() {}).name; - if (t.isMemberExpression(parent) && parent.object === node) { - return true; - } - - // (function () {})(); - if (t.isCallExpression(parent) && parent.callee === node) { - return true; - } - - return false; + return UnaryLike(node, parent); } export function ConditionalExpression(node: Object, parent: Object): boolean { @@ -194,21 +192,11 @@ export function ConditionalExpression(node: Object, parent: Object): boolean { return true; } - if (t.isCallExpression(parent) || t.isNewExpression(parent)) { - if (parent.callee === node) { - return true; - } - } - - if (t.isConditionalExpression(parent) && parent.test === node) { + if (t.isConditionalExpression(parent, { test: node })) { return true; } - if (t.isMemberExpression(parent) && parent.object === node) { - return true; - } - - return false; + return UnaryLike(node, parent); } export function AssignmentExpression(node: Object): boolean { diff --git a/packages/babel-generator/test/fixtures/types/UnaryExpression/actual.js b/packages/babel-generator/test/fixtures/types/UnaryExpression/actual.js index 9f318cdb1f..58154c99cf 100644 --- a/packages/babel-generator/test/fixtures/types/UnaryExpression/actual.js +++ b/packages/babel-generator/test/fixtures/types/UnaryExpression/actual.js @@ -3,3 +3,5 @@ delete delete i; !!i; + ++i; - --i; +typeof a(); +(typeof a)(); diff --git a/packages/babel-generator/test/fixtures/types/UnaryExpression/expected.js b/packages/babel-generator/test/fixtures/types/UnaryExpression/expected.js index 9f318cdb1f..58154c99cf 100644 --- a/packages/babel-generator/test/fixtures/types/UnaryExpression/expected.js +++ b/packages/babel-generator/test/fixtures/types/UnaryExpression/expected.js @@ -3,3 +3,5 @@ delete delete i; !!i; + ++i; - --i; +typeof a(); +(typeof a)();