From 41bfe919c06932b7e58cd9ead20157e06656160a Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Sun, 29 Sep 2019 05:38:10 +0200 Subject: [PATCH] Update: Fix handling of chained new expressions in new-parens (#12303) --- lib/rules/new-parens.js | 6 +++++- tests/lib/rules/new-parens.js | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/rules/new-parens.js b/lib/rules/new-parens.js index 4b9958fe6cb..405ec1b515a 100644 --- a/lib/rules/new-parens.js +++ b/lib/rules/new-parens.js @@ -65,7 +65,11 @@ module.exports = { const lastToken = sourceCode.getLastToken(node); const hasLastParen = lastToken && astUtils.isClosingParenToken(lastToken); - const hasParens = hasLastParen && astUtils.isOpeningParenToken(sourceCode.getTokenBefore(lastToken)); + + // `hasParens` is true only if the new expression ends with its own parens, e.g., new new foo() does not end with its own parens + const hasParens = hasLastParen && + astUtils.isOpeningParenToken(sourceCode.getTokenBefore(lastToken)) && + node.callee.range[1] < node.range[1]; if (always) { if (!hasParens) { diff --git a/tests/lib/rules/new-parens.js b/tests/lib/rules/new-parens.js index c13cc7150e7..3508ace8e96 100644 --- a/tests/lib/rules/new-parens.js +++ b/tests/lib/rules/new-parens.js @@ -119,6 +119,12 @@ ruleTester.run("new-parens", rule, { options: ["always"], errors: [error] }, + { + code: "var a = new new Foo()", + output: "var a = new new Foo()()", + options: ["always"], + errors: [error] + }, // Never { @@ -168,6 +174,12 @@ ruleTester.run("new-parens", rule, { output: "var a = ((new Foo)).bar;", options: ["never"], errors: [neverError] + }, + { + code: "var a = new new Foo()", + output: "var a = new (new Foo)", + options: ["never"], + errors: [neverError] } ] });