From dec5900c421166291612afabe2832d11dde2d201 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 4 Nov 2016 14:08:50 -0700 Subject: [PATCH] tools: add lint rule to enforce timer arguments Add a custom ESLint rule to require that setTimeout() and setInterval() get called with at least two arguments. This prevents omitting the duration or interval. PR-URL: https://github.com/nodejs/node/pull/9472 Reviewed-By: Teddy Katz Reviewed-By: James M Snell --- .eslintrc | 1 + tools/eslint-rules/timer-arguments.js | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tools/eslint-rules/timer-arguments.js diff --git a/.eslintrc b/.eslintrc index d2cc8ea000ac3f..34f32e59f0a626 100644 --- a/.eslintrc +++ b/.eslintrc @@ -124,6 +124,7 @@ rules: assert-fail-single-argument: 2 assert-throws-arguments: [2, { requireTwo: false }] new-with-error: [2, Error, RangeError, TypeError, SyntaxError, ReferenceError] + timer-arguments: 2 # Global scoped method and vars globals: diff --git a/tools/eslint-rules/timer-arguments.js b/tools/eslint-rules/timer-arguments.js new file mode 100644 index 00000000000000..4dd7816ff82ff2 --- /dev/null +++ b/tools/eslint-rules/timer-arguments.js @@ -0,0 +1,25 @@ +/** + * @fileoverview Require at least two arguments when calling setTimeout() or + * setInterval(). + * @author Rich Trott + */ +'use strict'; + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +function isTimer(name) { + return ['setTimeout', 'setInterval'].includes(name); +} + +module.exports = function(context) { + return { + 'CallExpression': function(node) { + const name = node.callee.name; + if (isTimer(name) && node.arguments.length < 2) { + context.report(node, `${name} must have at least 2 arguments`); + } + } + }; +};