diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index f96e572bfee..265ca4fea7e 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -418,11 +418,10 @@ module.exports = { hasDoubleExcessParens(callee) || !isIIFE(node) && !hasNewParensException && !( - /* - * Allow extra parens around a new expression if - * there are intervening parentheses. - */ - (callee.type === "MemberExpression" && doesMemberExpressionContainCallExpression(callee)) + // Allow extra parens around a new expression if they are intervening parentheses. + node.type === "NewExpression" && + callee.type === "MemberExpression" && + doesMemberExpressionContainCallExpression(callee) ) ) { report(node.callee); diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index 2cda39104d2..707992f80a7 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -673,6 +673,12 @@ ruleTester.run("no-extra-parens", rule, { invalid("(new foo.bar()).baz", "new foo.bar().baz", "NewExpression"), invalid("(new foo.bar()).baz()", "new foo.bar().baz()", "NewExpression"), + invalid("(a)()", "a()", "Identifier"), + invalid("(a.b)()", "a.b()", "MemberExpression"), + invalid("(a())()", "a()()", "CallExpression"), + invalid("(a.b())()", "a.b()()", "CallExpression"), + invalid("(a().b)()", "a().b()", "MemberExpression"), + invalid("(a().b.c)()", "a().b.c()", "MemberExpression"), invalid("new (A)", "new A", "Identifier"), invalid("(new A())()", "new A()()", "NewExpression"), invalid("(new A(1))()", "new A(1)()", "NewExpression"),