diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index a3dd5bab699..7cbb7522ebe 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -560,7 +560,11 @@ module.exports = { tokensToIgnore.add(secondToken); } - if (hasExcessParens(node)) { + const hasExtraParens = node.parent.type === "ExportDefaultDeclaration" + ? hasExcessParensWithPrecedence(node, PRECEDENCE_OF_ASSIGNMENT_EXPR) + : hasExcessParens(node); + + if (hasExtraParens) { report(node); } } diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index 13df7dc1ed1..5062857e699 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -530,13 +530,17 @@ ruleTester.run("no-extra-parens", rule, { "() => ({ foo: 1 }).foo", "() => ({ foo: 1 }.foo().bar).baz.qux()", "() => ({ foo: 1 }.foo().bar + baz)", + { + code: "export default (a, b)", + parserOptions: { sourceType: "module" } + }, { code: "export default (function(){}).foo", - parserOptions: { ecmaVersion: 6, sourceType: "module" } + parserOptions: { sourceType: "module" } }, { code: "export default (class{}).foo", - parserOptions: { ecmaVersion: 6, sourceType: "module" } + parserOptions: { sourceType: "module" } }, "({}).hasOwnProperty.call(foo, bar)", "({}) ? foo() : bar()", @@ -1358,6 +1362,55 @@ ruleTester.run("no-extra-parens", rule, { "UpdateExpression", 1 ), + invalid( + "export default ((a, b))", + "export default (a, b)", + "SequenceExpression", + 1, + { parserOptions: { sourceType: "module" } } + ), + invalid( + "export default (() => {})", + "export default () => {}", + "ArrowFunctionExpression", + 1, + { parserOptions: { sourceType: "module" } } + ), + invalid( + "export default ((a, b) => a + b)", + "export default (a, b) => a + b", + "ArrowFunctionExpression", + 1, + { parserOptions: { sourceType: "module" } } + ), + invalid( + "export default (a => a)", + "export default a => a", + "ArrowFunctionExpression", + 1, + { parserOptions: { sourceType: "module" } } + ), + invalid( + "export default (a = b)", + "export default a = b", + "AssignmentExpression", + 1, + { parserOptions: { sourceType: "module" } } + ), + invalid( + "export default (a ? b : c)", + "export default a ? b : c", + "ConditionalExpression", + 1, + { parserOptions: { sourceType: "module" } } + ), + invalid( + "export default (a)", + "export default a", + "Identifier", + 1, + { parserOptions: { sourceType: "module" } } + ), invalid( "for (foo of(bar));", "for (foo of bar);",