Skip to content

Commit 94b97b0

Browse files
tools: auto fix custom eslint rule for prefer-assert-iferror.js
1. Adds the fixer method 2. Extends Tests Refs: #16636
1 parent d2626ef commit 94b97b0

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

test/parallel/test-eslint-prefer-assert-iferror.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ new RuleTester().run('prefer-assert-iferror', rule, {
1515
invalid: [
1616
{
1717
code: 'if (err) throw err;',
18-
errors: [{ message: 'Use assert.ifError(err) instead.' }]
18+
errors: [{ message: 'Use assert.ifError(err) instead.' }],
19+
output: 'assert.ifError(err);'
1920
},
2021
{
2122
code: 'if (error) { throw error; }',
22-
errors: [{ message: 'Use assert.ifError(error) instead.' }]
23+
errors: [{ message: 'Use assert.ifError(error) instead.' }],
24+
output: 'assert.ifError(error);'
2325
}
2426
]
2527
});

tools/eslint-rules/prefer-assert-iferror.js

+21-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55

66
'use strict';
77

8+
const utils = require('./rules-utils.js');
9+
810
module.exports = {
911
create(context) {
1012
const sourceCode = context.getSourceCode();
13+
var assertImported = false;
1114

1215
function hasSameTokens(nodeA, nodeB) {
1316
const aTokens = sourceCode.getTokens(nodeA);
@@ -20,8 +23,15 @@ module.exports = {
2023
});
2124
}
2225

26+
function checkAssertNode(node) {
27+
if (utils.isRequired(node, ['assert'])) {
28+
assertImported = true;
29+
}
30+
}
31+
2332
return {
24-
IfStatement(node) {
33+
'CallExpression': (node) => checkAssertNode(node),
34+
'IfStatement': (node) => {
2535
const firstStatement = node.consequent.type === 'BlockStatement' ?
2636
node.consequent.body[0] :
2737
node.consequent;
@@ -30,10 +40,19 @@ module.exports = {
3040
firstStatement.type === 'ThrowStatement' &&
3141
hasSameTokens(node.test, firstStatement.argument)
3242
) {
43+
const argument = sourceCode.getText(node.test);
3344
context.report({
3445
node: firstStatement,
3546
message: 'Use assert.ifError({{argument}}) instead.',
36-
data: { argument: sourceCode.getText(node.test) }
47+
data: { argument },
48+
fix: (fixer) => {
49+
if (assertImported) {
50+
return fixer.replaceText(
51+
node,
52+
`assert.ifError(${argument});`
53+
);
54+
}
55+
}
3756
});
3857
}
3958
}

0 commit comments

Comments
 (0)