Browse Source

tools: lint rule for assert.fail()

`assert.fail()` is often mistakenly used with a single argument even in
Node.js core. (See fixes to previous instances in
b7f4b1ba4c,
28e9a022df. and
676e61872f54dd546e324599c7871c20b798386a.)

This commit adds a linting rule to identify instances of this issue.

PR-URL: https://github.com/nodejs/node/pull/6261
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Minwoo Jung <jmwsoft@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
process-exit-stdio-flushing
Rich Trott 9 years ago
committed by James M Snell
parent
commit
8ede3d5002
  1. 1
      .eslintrc
  2. 30
      tools/eslint-rules/assert-fail-single-argument.js

1
.eslintrc

@ -85,6 +85,7 @@ rules:
prefer-const: 2 prefer-const: 2
# Custom rules in tools/eslint-rules # Custom rules in tools/eslint-rules
assert-fail-single-argument: 2
new-with-error: [2, "Error", "RangeError", "TypeError", "SyntaxError", "ReferenceError"] new-with-error: [2, "Error", "RangeError", "TypeError", "SyntaxError", "ReferenceError"]
align-multiline-assignment: 2 align-multiline-assignment: 2

30
tools/eslint-rules/assert-fail-single-argument.js

@ -0,0 +1,30 @@
/**
* @fileoverview Prohibit use of a single argument only in `assert.fail()`. It
* is almost always an error.
* @author Rich Trott
*/
'use strict';
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
const msg = 'assert.fail() message should be third argument';
function isAssert(node) {
return node.callee.object && node.callee.object.name === 'assert';
}
function isFail(node) {
return node.callee.property && node.callee.property.name === 'fail';
}
module.exports = function(context) {
return {
'CallExpression': function(node) {
if (isAssert(node) && isFail(node) && node.arguments.length === 1) {
context.report(node, msg);
}
}
};
};
Loading…
Cancel
Save