diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 1222f2d34a84..8b043badf175 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -255,7 +255,17 @@ export function OptionalMemberExpression( node: Object, parent: Object, ): boolean { - return t.isCallExpression(parent) || t.isMemberExpression(parent); + return ( + t.isCallExpression(parent, { callee: node }) || + t.isMemberExpression(parent, { object: node }) + ); +} + +export function OptionalCallExpression(node: Object, parent: Object): boolean { + return ( + t.isCallExpression(parent, { callee: node }) || + t.isMemberExpression(parent, { object: node }) + ); } export function AssignmentExpression(node: Object): boolean { diff --git a/packages/babel-generator/test/fixtures/types/Optional-CallExpression/input.js b/packages/babel-generator/test/fixtures/types/Optional-CallExpression/input.js index bcd6e5b5d64f..0de13a68be71 100644 --- a/packages/babel-generator/test/fixtures/types/Optional-CallExpression/input.js +++ b/packages/babel-generator/test/fixtures/types/Optional-CallExpression/input.js @@ -5,6 +5,14 @@ foo?.(bar()); foo?.(bar("test")); foo(bar?.()); foo(bar?.("test")); +(foo?.())(); +(foo?.()).baz; +foo(bar?.baz); +foo(bar?.baz()); +foo(bar?.("test")); +foo[bar?.baz]; +foo[bar?.baz()]; +foo[bar?.("test")]; a.foo?.(); a.foo?.("foo"); a.foo?.("foo", "bar"); diff --git a/packages/babel-generator/test/fixtures/types/Optional-CallExpression/output.js b/packages/babel-generator/test/fixtures/types/Optional-CallExpression/output.js index 48dca55ae75c..ff468712077c 100644 --- a/packages/babel-generator/test/fixtures/types/Optional-CallExpression/output.js +++ b/packages/babel-generator/test/fixtures/types/Optional-CallExpression/output.js @@ -5,6 +5,14 @@ foo?.(bar()); foo?.(bar("test")); foo(bar?.()); foo(bar?.("test")); +(foo?.())(); +(foo?.()).baz; +foo(bar?.baz); +foo(bar?.baz()); +foo(bar?.("test")); +foo[bar?.baz]; +foo[bar?.baz()]; +foo[bar?.("test")]; a.foo?.(); a.foo?.("foo"); a.foo?.("foo", "bar");