Skip to content

Commit de14b2a

Browse files
shobhitchittoraMayaLekova
authored andcommitted
tools: add fixer for prefer-assert-iferror.js
PR-URL: nodejs#16648 Refs: nodejs#16636 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
1 parent bf6fa81 commit de14b2a

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

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

+10-4
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ new RuleTester().run('prefer-assert-iferror', rule, {
1414
],
1515
invalid: [
1616
{
17-
code: 'if (err) throw err;',
18-
errors: [{ message: 'Use assert.ifError(err) instead.' }]
17+
code: 'require("assert");\n' +
18+
'if (err) throw err;',
19+
errors: [{ message: 'Use assert.ifError(err) instead.' }],
20+
output: 'require("assert");\n' +
21+
'assert.ifError(err);'
1922
},
2023
{
21-
code: 'if (error) { throw error; }',
22-
errors: [{ message: 'Use assert.ifError(error) instead.' }]
24+
code: 'require("assert");\n' +
25+
'if (error) { throw error; }',
26+
errors: [{ message: 'Use assert.ifError(error) instead.' }],
27+
output: 'require("assert");\n' +
28+
'assert.ifError(error);'
2329
}
2430
]
2531
});

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)