diff --git a/lib/rules/no-extra-parens.js b/lib/rules/no-extra-parens.js index 3a21b69580b..400ce0c7613 100644 --- a/lib/rules/no-extra-parens.js +++ b/lib/rules/no-extra-parens.js @@ -471,6 +471,7 @@ module.exports = { const firstToken = isParenthesised(node) ? sourceCode.getTokenBefore(node) : sourceCode.getFirstToken(node); const secondToken = sourceCode.getTokenAfter(firstToken, astUtils.isNotOpeningParenToken); const thirdToken = secondToken ? sourceCode.getTokenAfter(secondToken) : null; + const tokenAfterClosingParens = secondToken ? sourceCode.getTokenAfter(secondToken, astUtils.isNotClosingParenToken) : null; if ( astUtils.isOpeningParenToken(firstToken) && @@ -479,7 +480,12 @@ module.exports = { secondToken.type === "Keyword" && ( secondToken.value === "function" || secondToken.value === "class" || - secondToken.value === "let" && astUtils.isOpeningBracketToken(sourceCode.getTokenAfter(secondToken, astUtils.isNotClosingParenToken)) + secondToken.value === "let" && + tokenAfterClosingParens && + ( + astUtils.isOpeningBracketToken(tokenAfterClosingParens) || + tokenAfterClosingParens.type === "Identifier" + ) ) || secondToken && secondToken.type === "Identifier" && secondToken.value === "async" && thirdToken && thirdToken.type === "Keyword" && thirdToken.value === "function" ) diff --git a/tests/lib/rules/no-extra-parens.js b/tests/lib/rules/no-extra-parens.js index b3481d06ab3..366a6c39bf2 100644 --- a/tests/lib/rules/no-extra-parens.js +++ b/tests/lib/rules/no-extra-parens.js @@ -452,6 +452,7 @@ ruleTester.run("no-extra-parens", rule, { "({}) ? foo() : bar()", "({}) + foo", "(function(){}) + foo", + "(let)\nfoo", "(let[foo]) = 1", // setting the 'foo' property of the 'let' variable to 1 { code: "((function(){}).foo.bar)();", @@ -1092,6 +1093,18 @@ ruleTester.run("no-extra-parens", rule, { "Identifier", 1 ), - invalid("for (a in (b, c));", "for (a in b, c);", "SequenceExpression", null) + invalid("for (a in (b, c));", "for (a in b, c);", "SequenceExpression", null), + invalid( + "(let)", + "let", + "Identifier", + 1 + ), + invalid( + "((let))", + "(let)", + "Identifier", + 1 + ) ] });