From cc23d15e2c02fad3a6a76a4d7412a888cd2a46c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 4 May 2022 16:38:34 -0400 Subject: [PATCH 1/2] fix: perserve () of lhs id with rhs unamed fn --- packages/babel-generator/src/node/parentheses.ts | 11 +++++++++++ .../test/fixtures/parentheses/identifier-lhs/input.js | 4 ++++ .../fixtures/parentheses/identifier-lhs/output.js | 7 +++++++ 3 files changed, 22 insertions(+) create mode 100644 packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js create mode 100644 packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js diff --git a/packages/babel-generator/src/node/parentheses.ts b/packages/babel-generator/src/node/parentheses.ts index bb651b6d2287..873deb203f3a 100644 --- a/packages/babel-generator/src/node/parentheses.ts +++ b/packages/babel-generator/src/node/parentheses.ts @@ -17,6 +17,7 @@ import { isForInStatement, isForOfStatement, isForStatement, + isFunctionExpression, isIfStatement, isIndexedAccessType, isIntersectionTypeAnnotation, @@ -344,6 +345,16 @@ export function Identifier( parent: t.Node, printStack: Array, ): boolean { + // 13.15.2 AssignmentExpression RS: Evaluation + // (fn) = function () {}; + if ( + node.extra?.parenthesized && + isAssignmentExpression(parent, { left: node }) && + isFunctionExpression(parent.right) && + parent.right.id == null + ) { + return true; + } // Non-strict code allows the identifier `let`, but it cannot occur as-is in // certain contexts to avoid ambiguity with contextual keyword `let`. if (node.name === "let") { diff --git a/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js new file mode 100644 index 000000000000..173c0b81819e --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js @@ -0,0 +1,4 @@ +var f, g, h; +(f) = function () {}; +g = function () {}; +(h) = function noParen() {} diff --git a/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js new file mode 100644 index 000000000000..b718a3d40c4d --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js @@ -0,0 +1,7 @@ +var f, g, h; + +(f) = function () {}; + +g = function () {}; + +h = function noParen() {}; \ No newline at end of file From e26b420ea682d601902c6133ee0cb419778d4e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 5 May 2022 13:49:11 -0400 Subject: [PATCH 2/2] review comments --- packages/babel-generator/src/node/parentheses.ts | 2 +- .../test/fixtures/parentheses/identifier-lhs/input.js | 5 ++++- .../test/fixtures/parentheses/identifier-lhs/output.js | 8 +++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/babel-generator/src/node/parentheses.ts b/packages/babel-generator/src/node/parentheses.ts index 873deb203f3a..2570a5c451b3 100644 --- a/packages/babel-generator/src/node/parentheses.ts +++ b/packages/babel-generator/src/node/parentheses.ts @@ -350,7 +350,7 @@ export function Identifier( if ( node.extra?.parenthesized && isAssignmentExpression(parent, { left: node }) && - isFunctionExpression(parent.right) && + (isFunctionExpression(parent.right) || isClassExpression(parent.right)) && parent.right.id == null ) { return true; diff --git a/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js index 173c0b81819e..b1c118d215b6 100644 --- a/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js +++ b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/input.js @@ -1,4 +1,7 @@ var f, g, h; (f) = function () {}; +(f) = class {}; g = function () {}; -(h) = function noParen() {} +g = class {}; +(h) = function noParen() {}; +(h) = class noParen {} diff --git a/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js index b718a3d40c4d..164de06f999a 100644 --- a/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js +++ b/packages/babel-generator/test/fixtures/parentheses/identifier-lhs/output.js @@ -2,6 +2,12 @@ var f, g, h; (f) = function () {}; +(f) = class {}; + g = function () {}; -h = function noParen() {}; \ No newline at end of file +g = class {}; + +h = function noParen() {}; + +h = class noParen {}; \ No newline at end of file