summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Trott <rtrott@gmail.com>2017-07-30 13:46:34 -0700
committerAnna Henningsen <anna@addaleax.net>2017-08-07 15:17:26 +0200
commit9f319d5dfbd651094c43cbeed25af4c782f2468d (patch)
tree2d837e6bca23aa8c8c294d8666a2c51af30e3f84
parent5094f2c2994efccfbf39bf8a985c77ec9a41bb4d (diff)
downloadnode-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.yaml7
-rw-r--r--doc/api/assert.md2
-rw-r--r--test/parallel/test-assert.js6
-rw-r--r--tools/eslint-rules/assert-throws-arguments.js60
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)
- };
- }
-};