tools: add fixer for prefer-assert-iferror.js
PR-URL: https://github.com/nodejs/node/pull/16648 Refs: https://github.com/nodejs/node/issues/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>
This commit is contained in:
parent
c0762c2f54
commit
d797775fb8
@ -14,12 +14,18 @@ new RuleTester().run('prefer-assert-iferror', rule, {
|
|||||||
],
|
],
|
||||||
invalid: [
|
invalid: [
|
||||||
{
|
{
|
||||||
code: 'if (err) throw err;',
|
code: 'require("assert");\n' +
|
||||||
errors: [{ message: 'Use assert.ifError(err) instead.' }]
|
'if (err) throw err;',
|
||||||
|
errors: [{ message: 'Use assert.ifError(err) instead.' }],
|
||||||
|
output: 'require("assert");\n' +
|
||||||
|
'assert.ifError(err);'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
code: 'if (error) { throw error; }',
|
code: 'require("assert");\n' +
|
||||||
errors: [{ message: 'Use assert.ifError(error) instead.' }]
|
'if (error) { throw error; }',
|
||||||
|
errors: [{ message: 'Use assert.ifError(error) instead.' }],
|
||||||
|
output: 'require("assert");\n' +
|
||||||
|
'assert.ifError(error);'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
@ -5,9 +5,12 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const utils = require('./rules-utils.js');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
create(context) {
|
create(context) {
|
||||||
const sourceCode = context.getSourceCode();
|
const sourceCode = context.getSourceCode();
|
||||||
|
var assertImported = false;
|
||||||
|
|
||||||
function hasSameTokens(nodeA, nodeB) {
|
function hasSameTokens(nodeA, nodeB) {
|
||||||
const aTokens = sourceCode.getTokens(nodeA);
|
const aTokens = sourceCode.getTokens(nodeA);
|
||||||
@ -20,8 +23,15 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkAssertNode(node) {
|
||||||
|
if (utils.isRequired(node, ['assert'])) {
|
||||||
|
assertImported = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
IfStatement(node) {
|
'CallExpression': (node) => checkAssertNode(node),
|
||||||
|
'IfStatement': (node) => {
|
||||||
const firstStatement = node.consequent.type === 'BlockStatement' ?
|
const firstStatement = node.consequent.type === 'BlockStatement' ?
|
||||||
node.consequent.body[0] :
|
node.consequent.body[0] :
|
||||||
node.consequent;
|
node.consequent;
|
||||||
@ -30,10 +40,19 @@ module.exports = {
|
|||||||
firstStatement.type === 'ThrowStatement' &&
|
firstStatement.type === 'ThrowStatement' &&
|
||||||
hasSameTokens(node.test, firstStatement.argument)
|
hasSameTokens(node.test, firstStatement.argument)
|
||||||
) {
|
) {
|
||||||
|
const argument = sourceCode.getText(node.test);
|
||||||
context.report({
|
context.report({
|
||||||
node: firstStatement,
|
node: firstStatement,
|
||||||
message: 'Use assert.ifError({{argument}}) instead.',
|
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});`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user