diff options
author | Rich Trott <rtrott@gmail.com> | 2017-07-30 13:46:34 -0700 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-08-07 15:17:26 +0200 |
commit | 9f319d5dfbd651094c43cbeed25af4c782f2468d (patch) | |
tree | 2d837e6bca23aa8c8c294d8666a2c51af30e3f84 | |
parent | 5094f2c2994efccfbf39bf8a985c77ec9a41bb4d (diff) | |
download | node-new-9f319d5dfbd651094c43cbeed25af4c782f2468d.tar.gz |
tools: replace assert-throw-arguments custom lint
The functionality of ESLint custom rule assert-throws-arguments can be
replaced with no-restricted-syntax entries.
PR-URL: https://github.com/nodejs/node/pull/14547
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | .eslintrc.yaml | 7 | ||||
-rw-r--r-- | doc/api/assert.md | 2 | ||||
-rw-r--r-- | test/parallel/test-assert.js | 6 | ||||
-rw-r--r-- | tools/eslint-rules/assert-throws-arguments.js | 60 |
4 files changed, 10 insertions, 65 deletions
diff --git a/.eslintrc.yaml b/.eslintrc.yaml index dfe99dcca2..3bded1a7ce 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -119,6 +119,12 @@ rules: no-mixed-spaces-and-tabs: error no-multiple-empty-lines: [error, {max: 2, maxEOF: 0, maxBOF: 0}] no-restricted-syntax: [error, { + selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.1.type='Literal']:not([arguments.1.regex])", + message: "use a regular expression for second argument of assert.throws()" + }, { + selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.length<2]", + message: "assert.throws() must be invoked with at least two arguments." + }, { selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]", message: "setTimeout() must be invoked with at least two arguments." }, { @@ -162,7 +168,6 @@ rules: template-curly-spacing: error # Custom rules in tools/eslint-rules - assert-throws-arguments: [error, { requireTwo: true }] no-unescaped-regexp-dot: error # Global scoped method and vars diff --git a/doc/api/assert.md b/doc/api/assert.md index a222b88778..2fc83307df 100644 --- a/doc/api/assert.md +++ b/doc/api/assert.md @@ -582,7 +582,7 @@ Note that `error` can not be a string. If a string is provided as the second argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes: -<!-- eslint-disable assert-throws-arguments --> +<!-- eslint-disable no-restricted-syntax --> ```js // THIS IS A MISTAKE! DO NOT DO THIS! assert.throws(myFunction, 'missing foo', 'did not throw with expected message'); diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js index 1aba15340b..ab45aa6c4b 100644 --- a/test/parallel/test-assert.js +++ b/test/parallel/test-assert.js @@ -412,11 +412,11 @@ function thrower(errorConstructor) { assert.throws(makeBlock(thrower, a.AssertionError), a.AssertionError, 'message'); assert.throws(makeBlock(thrower, a.AssertionError), a.AssertionError); -// eslint-disable-next-line assert-throws-arguments +// eslint-disable-next-line no-restricted-syntax assert.throws(makeBlock(thrower, a.AssertionError)); // if not passing an error, catch all. -// eslint-disable-next-line assert-throws-arguments +// eslint-disable-next-line no-restricted-syntax assert.throws(makeBlock(thrower, TypeError)); // when passing a type, only catch errors of the appropriate type @@ -646,7 +646,7 @@ testAssertionMessage({a: NaN, b: Infinity, c: -Infinity}, { let threw = false; try { - // eslint-disable-next-line assert-throws-arguments + // eslint-disable-next-line no-restricted-syntax assert.throws(function() { assert.ifError(null); }); diff --git a/tools/eslint-rules/assert-throws-arguments.js b/tools/eslint-rules/assert-throws-arguments.js deleted file mode 100644 index 3b51188c0c..0000000000 --- a/tools/eslint-rules/assert-throws-arguments.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @fileoverview Check that assert.throws is never called with a string as - * second argument. - * @author Michaël Zasso - */ -'use strict'; - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -function checkThrowsArguments(context, node) { - if (node.callee.type === 'MemberExpression' && - node.callee.object.name === 'assert' && - node.callee.property.name === 'throws') { - const args = node.arguments; - if (args.length > 3) { - context.report({ - message: 'Too many arguments', - node: node - }); - } else if (args.length > 1) { - const error = args[1]; - if (error.type === 'Literal' && typeof error.value === 'string' || - error.type === 'TemplateLiteral') { - context.report({ - message: 'Unexpected string as second argument', - node: error - }); - } - } else { - if (context.options[0].requireTwo) { - context.report({ - message: 'Expected at least two arguments', - node: node - }); - } - } - } -} - -module.exports = { - meta: { - schema: [ - { - type: 'object', - properties: { - requireTwo: { - type: 'boolean' - } - } - } - ] - }, - create: function(context) { - return { - CallExpression: (node) => checkThrowsArguments(context, node) - }; - } -}; |