From 4d7d595994ccefd4e1a9ab73bbc8eb55011f96d8 Mon Sep 17 00:00:00 2001 From: Jon Moss Date: Mon, 11 Dec 2017 17:20:39 -0500 Subject: [PATCH 1/2] tools: add number-isnan rule --- .eslintrc.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.eslintrc.yaml b/.eslintrc.yaml index da49eb8b4f7c82..4573723e5980a2 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -146,6 +146,9 @@ rules: }, { selector: "ThrowStatement > CallExpression[callee.name=/Error$/]", message: "Use new keyword when throwing an Error." + }, { + selector: "CallExpression[callee.name='isNaN']", + message: "Please use Number.isNaN instead of the global isNaN function" }] no-tabs: error no-trailing-spaces: error From 301cc7a298c17bb5f1e98a1ddb1a5e23dd1c14cf Mon Sep 17 00:00:00 2001 From: Jon Moss Date: Thu, 14 Dec 2017 16:53:03 -0500 Subject: [PATCH 2/2] tools: switch to explicit number-isnan rule --- .eslintrc.yaml | 3 --- test/.eslintrc.yaml | 1 + test/parallel/test-eslint-number-isnan.js | 20 ++++++++++++++++++++ tools/eslint-rules/number-isnan.js | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 test/parallel/test-eslint-number-isnan.js create mode 100644 tools/eslint-rules/number-isnan.js diff --git a/.eslintrc.yaml b/.eslintrc.yaml index 4573723e5980a2..da49eb8b4f7c82 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -146,9 +146,6 @@ rules: }, { selector: "ThrowStatement > CallExpression[callee.name=/Error$/]", message: "Use new keyword when throwing an Error." - }, { - selector: "CallExpression[callee.name='isNaN']", - message: "Please use Number.isNaN instead of the global isNaN function" }] no-tabs: error no-trailing-spaces: error diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml index 7a5d002e1b51e8..dbcb8ea6e0aa87 100644 --- a/test/.eslintrc.yaml +++ b/test/.eslintrc.yaml @@ -14,6 +14,7 @@ rules: prefer-common-mustnotcall: error crypto-check: error inspector-check: error + number-isnan: error ## common module is mandatory in tests required-modules: [error, common] diff --git a/test/parallel/test-eslint-number-isnan.js b/test/parallel/test-eslint-number-isnan.js new file mode 100644 index 00000000000000..deeac48bcccb68 --- /dev/null +++ b/test/parallel/test-eslint-number-isnan.js @@ -0,0 +1,20 @@ +'use strict'; + +require('../common'); + +const RuleTester = require('../../tools/eslint').RuleTester; +const rule = require('../../tools/eslint-rules/number-isnan'); + +const message = 'Please use Number.isNaN instead of the global isNaN function'; + +new RuleTester().run('number-isnan', rule, { + valid: [ + 'Number.isNaN()' + ], + invalid: [ + { + code: 'isNaN()', + errors: [{ message }] + } + ] +}); diff --git a/tools/eslint-rules/number-isnan.js b/tools/eslint-rules/number-isnan.js new file mode 100644 index 00000000000000..885c38be8b2384 --- /dev/null +++ b/tools/eslint-rules/number-isnan.js @@ -0,0 +1,14 @@ +'use strict'; + +const astSelector = "CallExpression[callee.name='isNaN']"; +const msg = 'Please use Number.isNaN instead of the global isNaN function'; + +module.exports = function(context) { + function report(node) { + context.report(node, msg); + } + + return { + [astSelector]: report + }; +};