diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index e78391c2bd58..8213fdd92e36 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -209,6 +209,7 @@ export function ConditionalExpression(node: Object, parent: Object): boolean { t.isBinary(parent) || t.isConditionalExpression(parent, { test: node }) || t.isAwaitExpression(parent) || + t.isOptionalMemberExpression(parent) || t.isTaggedTemplateExpression(parent) || t.isTSTypeAssertion(parent) || t.isTSAsExpression(parent) @@ -219,6 +220,13 @@ export function ConditionalExpression(node: Object, parent: Object): boolean { return UnaryLike(node, parent); } +export function OptionalMemberExpression( + node: Object, + parent: Object, +): boolean { + return t.isCallExpression(parent) || t.isMemberExpression(parent); +} + export function AssignmentExpression(node: Object): boolean { if (t.isObjectPattern(node.left)) { return true; diff --git a/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/input.js b/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/input.js index 1c60f768707d..6e71f9167264 100644 --- a/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/input.js +++ b/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/input.js @@ -14,3 +14,7 @@ foo?.["bar"]?.foo; 0.?.toString(); 0.5?.toString(); 1.000?.toString(); + +(a?.b).c; +(a ? b : c)?.d; +(a?.b)() diff --git a/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/output.js b/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/output.js index be34e83a5833..a99aa9039c18 100644 --- a/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/output.js +++ b/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/output.js @@ -11,4 +11,7 @@ foo?.["bar"].foo; foo?.["bar"]?.foo; 0.?.toString(); 0.5?.toString(); -1.000?.toString(); \ No newline at end of file +1.000?.toString(); +(a?.b).c; +(a ? b : c)?.d; +(a?.b)(); \ No newline at end of file