From 657eee59c569cc38699abeb635bd4bc48832fd87 Mon Sep 17 00:00:00 2001 From: not-an-aardvark Date: Tue, 6 Sep 2016 14:21:42 -0400 Subject: [PATCH] Update: add fixer for new-parens (fixes #6994) (#7047) --- docs/rules/new-parens.md | 2 ++ lib/rules/new-parens.js | 7 +++-- tests/lib/rules/new-parens.js | 51 ++++++++++++++++++++++++++++++----- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/docs/rules/new-parens.md b/docs/rules/new-parens.md index 85038a62dd8..17e495518bd 100644 --- a/docs/rules/new-parens.md +++ b/docs/rules/new-parens.md @@ -1,5 +1,7 @@ # require parentheses when invoking a constructor with no arguments (new-parens) +(fixable) The `--fix` option on the [command line](../user-guide/command-line-interface#fix) automatically fixes problems reported by this rule. + JavaScript allows the omission of parentheses when invoking a function via the `new` keyword and the constructor has no arguments. However, some coders believe that omitting the parentheses is inconsistent with the rest of the language and thus makes code less clear. ```js diff --git a/lib/rules/new-parens.js b/lib/rules/new-parens.js index 8d9ec0aac32..29f4b5c2082 100644 --- a/lib/rules/new-parens.js +++ b/lib/rules/new-parens.js @@ -55,7 +55,9 @@ module.exports = { recommended: false }, - schema: [] + schema: [], + + fixable: "code" }, create(context) { @@ -73,7 +75,8 @@ module.exports = { if (!(token && isOpeningParen(token) && isInRange(token, node))) { context.report({ node, - message: "Missing '()' invoking a constructor." + message: "Missing '()' invoking a constructor.", + fix: fixer => fixer.insertTextAfter(node, "()") }); } } diff --git a/tests/lib/rules/new-parens.js b/tests/lib/rules/new-parens.js index 7d1278a1b1c..0a06059e309 100644 --- a/tests/lib/rules/new-parens.js +++ b/tests/lib/rules/new-parens.js @@ -25,15 +25,52 @@ ruleTester.run("new-parens", rule, { "var a = new (Date)();", "var a = new ((Date))();", "var a = (new Date());", + "var a = new foo.Bar();", + "var a = (new Foo()).bar;", ], invalid: [ - { code: "var a = new Date;", errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] }, - { code: "var a = new Date", errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] }, - { code: "var a = new (Date);", errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] }, - { code: "var a = new (Date)", errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] }, - { code: "var a = (new Date)", errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] }, + { + code: "var a = new Date;", + output: "var a = new Date();", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression" }] + }, + { + code: "var a = new Date", + output: "var a = new Date()", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] + }, + { + code: "var a = new (Date);", + output: "var a = new (Date)();", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] + }, + { + code: "var a = new (Date)", + output: "var a = new (Date)()", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] + }, + { + code: "var a = (new Date)", + output: "var a = (new Date())", + errors: [{ message: "Missing '()' invoking a constructor.", + type: "NewExpression"}] + }, + { - // This `()` is `CallExpression`'s. This is a call of the result of `new Date`. - { code: "var a = (new Date)()", errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] }, + // This `()` is `CallExpression`'s. This is a call of the result of `new Date`. + code: "var a = (new Date)()", + output: "var a = (new Date())()", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression"}] + }, + { + code: "var a = new foo.Bar;", + output: "var a = new foo.Bar();", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression" }] + }, + { + code: "var a = (new Foo).bar;", + output: "var a = (new Foo()).bar;", + errors: [{ message: "Missing '()' invoking a constructor.", type: "NewExpression" }] + } ] });