Skip to content

Commit 3f09aab

Browse files
authored
fix: function-paren-newline crash on "new new Foo();" (#15850)
* fix: function-paren-newline: crash on "new new Foo();" * fix: function-paren-newline: false negative case support
1 parent 2b83376 commit 3f09aab

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

lib/rules/function-paren-newline.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,13 @@ module.exports = {
191191
function getParenTokens(node) {
192192
switch (node.type) {
193193
case "NewExpression":
194-
if (!node.arguments.length && !(
195-
astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) &&
196-
astUtils.isClosingParenToken(sourceCode.getLastToken(node))
197-
)) {
194+
if (!node.arguments.length &&
195+
!(
196+
astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) &&
197+
astUtils.isClosingParenToken(sourceCode.getLastToken(node)) &&
198+
node.callee.range[1] < node.range[1]
199+
)
200+
) {
198201

199202
// If the NewExpression does not have parens (e.g. `new Foo`), return null.
200203
return null;

tests/lib/rules/function-paren-newline.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
3030
ruleTester.run("function-paren-newline", rule, {
3131

3232
valid: [
33+
"new new Foo();",
3334

3435
// multiline option (default)
3536
"function baz(foo, bar) {}",
@@ -1174,6 +1175,18 @@ ruleTester.run("function-paren-newline", rule, {
11741175
options: ["never"],
11751176
errors: [LEFT_UNEXPECTED_ERROR]
11761177
},
1178+
{
1179+
code: `
1180+
new new C()(
1181+
);
1182+
`,
1183+
output: `
1184+
new new C()();
1185+
`,
1186+
options: ["never"],
1187+
errors: [LEFT_UNEXPECTED_ERROR, RIGHT_UNEXPECTED_ERROR]
1188+
},
1189+
11771190
{
11781191
code: `
11791192
function baz(

0 commit comments

Comments
 (0)