diff --git a/packages/babel-generator/src/node/whitespace.js b/packages/babel-generator/src/node/whitespace.js index c9bf14750d2d..27e8161be572 100644 --- a/packages/babel-generator/src/node/whitespace.js +++ b/packages/babel-generator/src/node/whitespace.js @@ -14,13 +14,13 @@ type WhitespaceObject = { */ function crawl(node, state = {}) { - if (t.isMemberExpression(node)) { + if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) { crawl(node.object, state); if (node.computed) crawl(node.property, state); } else if (t.isBinary(node) || t.isAssignmentExpression(node)) { crawl(node.left, state); crawl(node.right, state); - } else if (t.isCallExpression(node)) { + } else if (t.isCallExpression(node) || t.isOptionalCallExpression(node)) { state.hasCall = true; crawl(node.callee, state); } else if (t.isFunction(node)) { @@ -119,7 +119,7 @@ export const nodes = { }, /** - * Test if CallExpression needs whitespace. + * Test if CallExpressionish needs whitespace. */ CallExpression(node: Object): ?WhitespaceObject { @@ -131,6 +131,15 @@ export const nodes = { } }, + OptionalCallExpression(node: Object): ?WhitespaceObject { + if (t.isFunction(node.callee)) { + return { + before: true, + after: true, + }; + } + }, + /** * Test if VariableDeclaration needs whitespace. */ diff --git a/packages/babel-generator/test/fixtures/whitespace/call-expression/input.js b/packages/babel-generator/test/fixtures/whitespace/call-expression/input.js new file mode 100644 index 000000000000..7cc11bd3c019 --- /dev/null +++ b/packages/babel-generator/test/fixtures/whitespace/call-expression/input.js @@ -0,0 +1,5 @@ +(() => {})(); +foo(); + +(() => {})?.(); +foo(); diff --git a/packages/babel-generator/test/fixtures/whitespace/call-expression/output.js b/packages/babel-generator/test/fixtures/whitespace/call-expression/output.js new file mode 100644 index 000000000000..e8f531fc4c7d --- /dev/null +++ b/packages/babel-generator/test/fixtures/whitespace/call-expression/output.js @@ -0,0 +1,7 @@ +(() => {})(); + +foo(); + +(() => {})?.(); + +foo(); diff --git a/packages/babel-generator/test/fixtures/whitespace/member-expression/input.js b/packages/babel-generator/test/fixtures/whitespace/member-expression/input.js new file mode 100644 index 000000000000..8b89c89a2fa3 --- /dev/null +++ b/packages/babel-generator/test/fixtures/whitespace/member-expression/input.js @@ -0,0 +1,5 @@ +foo = (() => {}).call(); +foo; + +foo = (() => {})?.call(); +foo; diff --git a/packages/babel-generator/test/fixtures/whitespace/member-expression/output.js b/packages/babel-generator/test/fixtures/whitespace/member-expression/output.js new file mode 100644 index 000000000000..957955ae9efa --- /dev/null +++ b/packages/babel-generator/test/fixtures/whitespace/member-expression/output.js @@ -0,0 +1,7 @@ +foo = (() => {}).call(); + +foo; + +foo = (() => {})?.call(); + +foo; \ No newline at end of file