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: [
|
||||
{
|
||||
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);'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
@ -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});`
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user