diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index 6c3198b5f02..340695ff5eb 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -973,7 +973,21 @@ module.exports = { SpreadElement: checkSpreadOperator, SpreadProperty: checkSpreadOperator, - ExperimentalSpreadProperty: checkSpreadOperator + ExperimentalSpreadProperty: checkSpreadOperator, + + TemplateLiteral(node) { + node.expressions + .filter(e => e && hasExcessParens(e)) + .forEach(report); + }, + + AssignmentPattern(node) { + const { right } = node; + + if (right && hasExcessParens(right) && precedence(right) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) { + report(right); + } + } }; } diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index 7be7d6e9e2d..4d3c7022a3f 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -1174,6 +1174,12 @@ ruleTester.run("no-extra-parens", rule, { "Identifier", 1 ), + invalid("let s = `${(v)}`", "let s = `${v}`", "Identifier"), + invalid("let s = `${(a, b)}`", "let s = `${a, b}`", "SequenceExpression"), + invalid("function foo(a = (b)) {}", "function foo(a = b) {}", "Identifier"), + invalid("const bar = (a = (b)) => a", "const bar = (a = b) => a", "Identifier"), + invalid("const [a = (b)] = []", "const [a = b] = []", "Identifier"), + invalid("const {a = (b)} = {}", "const {a = b} = {}", "Identifier"), // https://github.com/eslint/eslint/issues/11706 (also in valid[]) {