From 4cc6565232067f91dcf443a9bc6c898604e0e89d Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Wed, 26 Jun 2019 11:28:05 +0800 Subject: [PATCH 1/3] Fix: fix on TemplateLiteral --- lib/rules/no-extra-parens.js | 8 +++++++- tests/lib/rules/no-extra-parens.js | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index 98fc49654cb..52b5fa75f99 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -749,7 +749,13 @@ module.exports = { SpreadElement: checkSpreadOperator, SpreadProperty: checkSpreadOperator, - ExperimentalSpreadProperty: checkSpreadOperator + ExperimentalSpreadProperty: checkSpreadOperator, + + TemplateLiteral(node) { + node.expressions + .filter(e => e && hasExcessParens(e) && precedence(e) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) + .forEach(report); + } }; } diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index 69d814e7df8..f5ac36217b8 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -466,7 +466,9 @@ ruleTester.run("no-extra-parens", rule, { "for ((let) in foo);", "for ((let[foo]) in bar);", "for ((let)[foo] in bar);", - "for ((let[foo].bar) in baz);" + "for ((let[foo].bar) in baz);", + + "let s = `${(a, b)}`" ], invalid: [ @@ -1105,6 +1107,7 @@ ruleTester.run("no-extra-parens", rule, { "(let)", "Identifier", 1 - ) + ), + invalid("let s = `${(v)}`", "let s = `${v}`", "Identifier") ] }); From f03e9e9788eb08ceda05321bf9bddf37915ab7b0 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Wed, 26 Jun 2019 11:46:29 +0800 Subject: [PATCH 2/3] Fix: fix on AssignmentPattern --- lib/rules/no-extra-parens.js | 8 ++++++++ tests/lib/rules/no-extra-parens.js | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index 52b5fa75f99..aef50a40712 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -755,6 +755,14 @@ module.exports = { node.expressions .filter(e => e && hasExcessParens(e) && precedence(e) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) .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 f5ac36217b8..fe84c5ab6b8 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -1108,6 +1108,10 @@ ruleTester.run("no-extra-parens", rule, { "Identifier", 1 ), - invalid("let s = `${(v)}`", "let s = `${v}`", "Identifier") + invalid("let s = `${(v)}`", "let s = `${v}`", "Identifier"), + 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") ] }); From 47829be39d1515838fa4c2143eb875b4915bde5f Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Thu, 27 Jun 2019 09:26:39 +0800 Subject: [PATCH 3/3] Fix: fix SequenceExpression at TemplateLiteral --- lib/rules/no-extra-parens.js | 2 +- tests/lib/rules/no-extra-parens.js | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index aef50a40712..59d469943cd 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -753,7 +753,7 @@ module.exports = { TemplateLiteral(node) { node.expressions - .filter(e => e && hasExcessParens(e) && precedence(e) >= PRECEDENCE_OF_ASSIGNMENT_EXPR) + .filter(e => e && hasExcessParens(e)) .forEach(report); }, diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index fe84c5ab6b8..a019397f54c 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -466,9 +466,7 @@ ruleTester.run("no-extra-parens", rule, { "for ((let) in foo);", "for ((let[foo]) in bar);", "for ((let)[foo] in bar);", - "for ((let[foo].bar) in baz);", - - "let s = `${(a, b)}`" + "for ((let[foo].bar) in baz);" ], invalid: [ @@ -1109,6 +1107,7 @@ ruleTester.run("no-extra-parens", rule, { 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"),