From 61b62bebfc41e0cede5853fad74e77c4ca5bcbec Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Sat, 22 Sep 2018 10:16:11 -0500 Subject: [PATCH 1/2] Fix some missing parens cases with OptionalMemberExpression in generator --- packages/babel-generator/src/node/parentheses.js | 8 ++++++++ .../fixtures/types/Optional-MemberExpression/input.js | 3 +++ .../fixtures/types/Optional-MemberExpression/output.js | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index e78391c2bd58..51cb7493ed02 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.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..ca04a34de1f3 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,6 @@ foo?.["bar"]?.foo; 0.?.toString(); 0.5?.toString(); 1.000?.toString(); + +(a?.b).c; +(a ? b : c)?.d; 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..fe253723eb5d 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,6 @@ 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; \ No newline at end of file From 81fb465d4f5d02bcd12f0a85a1354a4a5747034a Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Sat, 22 Sep 2018 16:05:36 -0500 Subject: [PATCH 2/2] call expression --- packages/babel-generator/src/node/parentheses.js | 2 +- .../test/fixtures/types/Optional-MemberExpression/input.js | 1 + .../test/fixtures/types/Optional-MemberExpression/output.js | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 51cb7493ed02..8213fdd92e36 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -224,7 +224,7 @@ export function OptionalMemberExpression( node: Object, parent: Object, ): boolean { - return t.isMemberExpression(parent); + return t.isCallExpression(parent) || t.isMemberExpression(parent); } export function AssignmentExpression(node: Object): boolean { 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 ca04a34de1f3..6e71f9167264 100644 --- a/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/input.js +++ b/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/input.js @@ -17,3 +17,4 @@ foo?.["bar"]?.foo; (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 fe253723eb5d..a99aa9039c18 100644 --- a/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/output.js +++ b/packages/babel-generator/test/fixtures/types/Optional-MemberExpression/output.js @@ -13,4 +13,5 @@ foo?.["bar"]?.foo; 0.5?.toString(); 1.000?.toString(); (a?.b).c; -(a ? b : c)?.d; \ No newline at end of file +(a ? b : c)?.d; +(a?.b)(); \ No newline at end of file