summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/parallel/test-eslint-prefer-assert-iferror.js14
-rw-r--r--tools/eslint-rules/prefer-assert-iferror.js23
2 files changed, 31 insertions, 6 deletions
diff --git a/test/parallel/test-eslint-prefer-assert-iferror.js b/test/parallel/test-eslint-prefer-assert-iferror.js
index 790207bc30..6ecf92adbe 100644
--- a/test/parallel/test-eslint-prefer-assert-iferror.js
+++ b/test/parallel/test-eslint-prefer-assert-iferror.js
@@ -16,12 +16,18 @@ new RuleTester().run('prefer-assert-iferror', rule, {
],
invalid: [
{
- code: 'if (err) throw err;',
- errors: [{ message: 'Use assert.ifError(err) instead.' }]
+ code: 'require("assert");\n' +
+ 'if (err) throw err;',
+ errors: [{ message: 'Use assert.ifError(err) instead.' }],
+ output: 'require("assert");\n' +
+ 'assert.ifError(err);'
},
{
- code: 'if (error) { throw error; }',
- errors: [{ message: 'Use assert.ifError(error) instead.' }]
+ code: 'require("assert");\n' +
+ 'if (error) { throw error; }',
+ errors: [{ message: 'Use assert.ifError(error) instead.' }],
+ output: 'require("assert");\n' +
+ 'assert.ifError(error);'
}
]
});
diff --git a/tools/eslint-rules/prefer-assert-iferror.js b/tools/eslint-rules/prefer-assert-iferror.js
index e152874176..399ee7403a 100644
--- a/tools/eslint-rules/prefer-assert-iferror.js
+++ b/tools/eslint-rules/prefer-assert-iferror.js
@@ -5,9 +5,12 @@
'use strict';
+const utils = require('./rules-utils.js');
+
module.exports = {
create(context) {
const sourceCode = context.getSourceCode();
+ var assertImported = false;
function hasSameTokens(nodeA, nodeB) {
const aTokens = sourceCode.getTokens(nodeA);
@@ -20,8 +23,15 @@ module.exports = {
});
}
+ function checkAssertNode(node) {
+ if (utils.isRequired(node, ['assert'])) {
+ assertImported = true;
+ }
+ }
+
return {
- IfStatement(node) {
+ 'CallExpression': (node) => checkAssertNode(node),
+ 'IfStatement': (node) => {
const firstStatement = node.consequent.type === 'BlockStatement' ?
node.consequent.body[0] :
node.consequent;
@@ -30,10 +40,19 @@ module.exports = {
firstStatement.type === 'ThrowStatement' &&
hasSameTokens(node.test, firstStatement.argument)
) {
+ const argument = sourceCode.getText(node.test);
context.report({
node: firstStatement,
message: 'Use assert.ifError({{argument}}) instead.',
- data: { argument: sourceCode.getText(node.test) }
+ data: { argument },
+ fix: (fixer) => {
+ if (assertImported) {
+ return fixer.replaceText(
+ node,
+ `assert.ifError(${argument});`
+ );
+ }
+ }
});
}
}