diff --git a/changelog_unreleased/javascript/pr-7491.md b/changelog_unreleased/javascript/pr-7491.md new file mode 100644 index 000000000..c32d392ac --- /dev/null +++ b/changelog_unreleased/javascript/pr-7491.md @@ -0,0 +1,15 @@ +#### Keep parentheses of `SequenceExpression` for `ExportDefaultDeclaration` ([#7491](https://github.com/prettier/prettier/pull/7491) by [@fisker](https://github.com/fisker)) + +Remove parentheses of `SequenceExpression` breaks `ExportDefaultDeclaration`. + + +```jsx +// Input +export default (1, 2); + +// Prettier stable +export default 1, 2; + +// Prettier master +export default (1, 2); +``` diff --git a/src/language-js/needs-parens.js b/src/language-js/needs-parens.js index 8818c7483..928883067 100644 --- a/src/language-js/needs-parens.js +++ b/src/language-js/needs-parens.js @@ -172,11 +172,15 @@ function needsParens(path, options) { return true; } - // `export default function` or `export default class` can't be followed by - // anything after. So an expression like `export default (function(){}).toString()` - // needs to be followed by a parentheses if (parent.type === "ExportDefaultDeclaration") { - return shouldWrapFunctionForExportDefault(path, options); + return ( + // `export default function` or `export default class` can't be followed by + // anything after. So an expression like `export default (function(){}).toString()` + // needs to be followed by a parentheses + shouldWrapFunctionForExportDefault(path, options) || + // `export default (foo, bar)` also needs parentheses + node.type === "SequenceExpression" + ); } if (parent.type === "Decorator" && parent.expression === node) { diff --git a/tests/sequence_parentheses/__snapshots__/jsfmt.spec.js.snap b/tests/sequence_parentheses/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..23b184c9e --- /dev/null +++ b/tests/sequence_parentheses/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,16 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`export-default.js 1`] = ` +====================================options===================================== +parsers: ["flow", "babel", "flow", "typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +export default (1, +2); + +=====================================output===================================== +export default (1, 2); + +================================================================================ +`; diff --git a/tests/sequence_parentheses/export-default.js b/tests/sequence_parentheses/export-default.js new file mode 100644 index 000000000..a7aa3bf3f --- /dev/null +++ b/tests/sequence_parentheses/export-default.js @@ -0,0 +1,2 @@ +export default (1, +2); diff --git a/tests/sequence_parentheses/jsfmt.spec.js b/tests/sequence_parentheses/jsfmt.spec.js new file mode 100644 index 000000000..7084fed0c --- /dev/null +++ b/tests/sequence_parentheses/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, ["flow", "babel", "flow", "typescript"]);