tools: prepare ESLint rules for 8.0.0 requirements
PR-URL: https://github.com/nodejs/node/pull/40394 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
0a1b399781
commit
dd8e219d71
@ -20,107 +20,108 @@ const cryptoModules = ['crypto', 'http2'];
|
||||
const requireModules = cryptoModules.concat(['tls', 'https']);
|
||||
const bindingModules = cryptoModules.concat(['tls_wrap']);
|
||||
|
||||
module.exports = function(context) {
|
||||
const missingCheckNodes = [];
|
||||
const requireNodes = [];
|
||||
let commonModuleNode = null;
|
||||
let hasSkipCall = false;
|
||||
module.exports = {
|
||||
meta: {
|
||||
fixable: 'code',
|
||||
},
|
||||
create(context) {
|
||||
const missingCheckNodes = [];
|
||||
const requireNodes = [];
|
||||
let commonModuleNode = null;
|
||||
let hasSkipCall = false;
|
||||
|
||||
function testCryptoUsage(node) {
|
||||
if (utils.isRequired(node, requireModules) ||
|
||||
utils.isBinding(node, bindingModules)) {
|
||||
requireNodes.push(node);
|
||||
function testCryptoUsage(node) {
|
||||
if (utils.isRequired(node, requireModules) ||
|
||||
utils.isBinding(node, bindingModules)) {
|
||||
requireNodes.push(node);
|
||||
}
|
||||
|
||||
if (utils.isCommonModule(node)) {
|
||||
commonModuleNode = node;
|
||||
}
|
||||
}
|
||||
|
||||
if (utils.isCommonModule(node)) {
|
||||
commonModuleNode = node;
|
||||
function testIfStatement(node) {
|
||||
if (node.test.argument === undefined) {
|
||||
return;
|
||||
}
|
||||
if (isCryptoCheck(node.test.argument)) {
|
||||
checkCryptoCall(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function testIfStatement(node) {
|
||||
if (node.test.argument === undefined) {
|
||||
return;
|
||||
function isCryptoCheck(node) {
|
||||
return utils.usesCommonProperty(node, ['hasCrypto', 'hasFipsCrypto']);
|
||||
}
|
||||
if (isCryptoCheck(node.test.argument)) {
|
||||
checkCryptoCall(node);
|
||||
|
||||
function checkCryptoCall(node) {
|
||||
if (utils.inSkipBlock(node)) {
|
||||
hasSkipCall = true;
|
||||
} else {
|
||||
missingCheckNodes.push(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isCryptoCheck(node) {
|
||||
return utils.usesCommonProperty(node, ['hasCrypto', 'hasFipsCrypto']);
|
||||
}
|
||||
|
||||
function checkCryptoCall(node) {
|
||||
if (utils.inSkipBlock(node)) {
|
||||
hasSkipCall = true;
|
||||
} else {
|
||||
missingCheckNodes.push(node);
|
||||
function testMemberExpression(node) {
|
||||
if (isCryptoCheck(node)) {
|
||||
checkCryptoCall(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function testMemberExpression(node) {
|
||||
if (isCryptoCheck(node)) {
|
||||
checkCryptoCall(node);
|
||||
}
|
||||
}
|
||||
|
||||
function reportIfMissingCheck() {
|
||||
if (hasSkipCall) {
|
||||
// There is a skip, which is good, but verify that the require() calls
|
||||
// in question come after at least one check.
|
||||
if (missingCheckNodes.length > 0) {
|
||||
requireNodes.forEach((requireNode) => {
|
||||
const beforeAllChecks = missingCheckNodes.every((checkNode) => {
|
||||
return requireNode.range[0] < checkNode.range[0];
|
||||
});
|
||||
|
||||
if (beforeAllChecks) {
|
||||
context.report({
|
||||
node: requireNode,
|
||||
message: msg
|
||||
function reportIfMissingCheck() {
|
||||
if (hasSkipCall) {
|
||||
// There is a skip, which is good, but verify that the require() calls
|
||||
// in question come after at least one check.
|
||||
if (missingCheckNodes.length > 0) {
|
||||
requireNodes.forEach((requireNode) => {
|
||||
const beforeAllChecks = missingCheckNodes.every((checkNode) => {
|
||||
return requireNode.range[0] < checkNode.range[0];
|
||||
});
|
||||
|
||||
if (beforeAllChecks) {
|
||||
context.report({
|
||||
node: requireNode,
|
||||
message: msg
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (requireNodes.length > 0) {
|
||||
if (missingCheckNodes.length > 0) {
|
||||
report(missingCheckNodes);
|
||||
} else {
|
||||
report(requireNodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function report(nodes) {
|
||||
nodes.forEach((node) => {
|
||||
context.report({
|
||||
node,
|
||||
message: msg,
|
||||
fix: (fixer) => {
|
||||
if (commonModuleNode) {
|
||||
return fixer.insertTextAfter(
|
||||
commonModuleNode,
|
||||
'\nif (!common.hasCrypto) {' +
|
||||
' common.skip("missing crypto");' +
|
||||
'}'
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (requireNodes.length > 0) {
|
||||
if (missingCheckNodes.length > 0) {
|
||||
report(missingCheckNodes);
|
||||
} else {
|
||||
report(requireNodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function report(nodes) {
|
||||
nodes.forEach((node) => {
|
||||
context.report({
|
||||
node,
|
||||
message: msg,
|
||||
fix: (fixer) => {
|
||||
if (commonModuleNode) {
|
||||
return fixer.insertTextAfter(
|
||||
commonModuleNode,
|
||||
'\nif (!common.hasCrypto) {' +
|
||||
' common.skip("missing crypto");' +
|
||||
'}'
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
'CallExpression': (node) => testCryptoUsage(node),
|
||||
'IfStatement:exit': (node) => testIfStatement(node),
|
||||
'MemberExpression:exit': (node) => testMemberExpression(node),
|
||||
'Program:exit': () => reportIfMissingCheck()
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
'CallExpression': (node) => testCryptoUsage(node),
|
||||
'IfStatement:exit': (node) => testIfStatement(node),
|
||||
'MemberExpression:exit': (node) => testMemberExpression(node),
|
||||
'Program:exit': () => reportIfMissingCheck()
|
||||
};
|
||||
};
|
||||
|
||||
module.exports.meta = {
|
||||
fixable: 'code'
|
||||
};
|
||||
|
@ -13,53 +13,54 @@ const utils = require('./rules-utils.js');
|
||||
const msg = 'Please add a skipIfInspectorDisabled() call to allow this ' +
|
||||
'test to be skipped when Node is built \'--without-inspector\'.';
|
||||
|
||||
module.exports = function(context) {
|
||||
const missingCheckNodes = [];
|
||||
let commonModuleNode = null;
|
||||
let hasInspectorCheck = false;
|
||||
module.exports = {
|
||||
meta: {
|
||||
fixable: 'code',
|
||||
},
|
||||
create(context) {
|
||||
const missingCheckNodes = [];
|
||||
let commonModuleNode = null;
|
||||
let hasInspectorCheck = false;
|
||||
|
||||
function testInspectorUsage(context, node) {
|
||||
if (utils.isRequired(node, ['inspector'])) {
|
||||
missingCheckNodes.push(node);
|
||||
function testInspectorUsage(context, node) {
|
||||
if (utils.isRequired(node, ['inspector'])) {
|
||||
missingCheckNodes.push(node);
|
||||
}
|
||||
|
||||
if (utils.isCommonModule(node)) {
|
||||
commonModuleNode = node;
|
||||
}
|
||||
}
|
||||
|
||||
if (utils.isCommonModule(node)) {
|
||||
commonModuleNode = node;
|
||||
function checkMemberExpression(context, node) {
|
||||
if (utils.usesCommonProperty(node, ['skipIfInspectorDisabled'])) {
|
||||
hasInspectorCheck = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkMemberExpression(context, node) {
|
||||
if (utils.usesCommonProperty(node, ['skipIfInspectorDisabled'])) {
|
||||
hasInspectorCheck = true;
|
||||
}
|
||||
}
|
||||
|
||||
function reportIfMissing(context) {
|
||||
if (!hasInspectorCheck) {
|
||||
missingCheckNodes.forEach((node) => {
|
||||
context.report({
|
||||
node,
|
||||
message: msg,
|
||||
fix: (fixer) => {
|
||||
if (commonModuleNode) {
|
||||
return fixer.insertTextAfter(
|
||||
commonModuleNode,
|
||||
'\ncommon.skipIfInspectorDisabled();'
|
||||
);
|
||||
function reportIfMissing(context) {
|
||||
if (!hasInspectorCheck) {
|
||||
missingCheckNodes.forEach((node) => {
|
||||
context.report({
|
||||
node,
|
||||
message: msg,
|
||||
fix: (fixer) => {
|
||||
if (commonModuleNode) {
|
||||
return fixer.insertTextAfter(
|
||||
commonModuleNode,
|
||||
'\ncommon.skipIfInspectorDisabled();'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
'CallExpression': (node) => testInspectorUsage(context, node),
|
||||
'MemberExpression': (node) => checkMemberExpression(context, node),
|
||||
'Program:exit': () => reportIfMissing(context)
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
'CallExpression': (node) => testInspectorUsage(context, node),
|
||||
'MemberExpression': (node) => checkMemberExpression(context, node),
|
||||
'Program:exit': () => reportIfMissing(context)
|
||||
};
|
||||
};
|
||||
|
||||
module.exports.meta = {
|
||||
fixable: 'code'
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user