Skip to content

Commit a33dc81

Browse files
shobhitchittoraMylesBorins
authored andcommitted
tools: add fixer for prefer-assert-iferror.js
PR-URL: #16648 Refs: #16636 Reviewed-By: Anatoli Papirovski <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]>
1 parent 5439154 commit a33dc81

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

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

Lines changed: 10 additions & 4 deletions
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‎

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55

66
'use strict';
77

8+
constutils=require('./rules-utils.js');
9+
810
module.exports={
911
create(context){
1012
constsourceCode=context.getSourceCode();
13+
varassertImported=false;
1114

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

26+
functioncheckAssertNode(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
constfirstStatement=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+
constargument=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+
returnfixer.replaceText(
51+
node,
52+
`assert.ifError(${argument});`
53+
);
54+
}
55+
}
3756
});
3857
}
3958
}

0 commit comments

Comments
(0)