Skip to content

Commit c32b087

Browse files
shobhitchittorarvagg
authored andcommitted
tools: auto fix custom crypto-check eslint rule
1. Fixer for crypto-check.js 2. Extends tests PR-URL: #16647 Refs: #16636 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Khaidi Chu <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]>
1 parent c4716dc commit c32b087

File tree

3 files changed

+52
-9
lines changed

3 files changed

+52
-9
lines changed

‎test/parallel/test-eslint-crypto-check.js‎

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,34 @@ new RuleTester().run('crypto-check', rule,{
1515
'foo',
1616
'crypto',
1717
`
18-
if (!common.hasCrypto){
19-
common.skip();
20-
}
21-
require('crypto');
18+
if (!common.hasCrypto){
19+
common.skip("missing crypto");
20+
}
21+
require("crypto");
2222
`
2323
],
2424
invalid: [
2525
{
26-
code: 'require("crypto")',
27-
errors: [{ message }]
26+
code: 'require("common")\n'+
27+
'require("crypto")',
28+
errors: [{ message }],
29+
output: 'require("common")\n'+
30+
'if (!common.hasCrypto){'+
31+
' common.skip("missing crypto");'+
32+
'}\n'+
33+
'require("crypto")'
2834
},
2935
{
30-
code: 'if (common.foo){} require("crypto")',
31-
errors: [{ message }]
36+
code: 'require("common")\n'+
37+
'if (common.foo){}\n'+
38+
'require("crypto")',
39+
errors: [{ message }],
40+
output: 'require("common")\n'+
41+
'if (!common.hasCrypto){'+
42+
' common.skip("missing crypto");'+
43+
'}\n'+
44+
'if (common.foo){}\n'+
45+
'require("crypto")'
3246
}
3347
]
3448
});

‎tools/eslint-rules/crypto-check.js‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,18 @@ const bindingModules = cryptoModules.concat(['tls_wrap']);
2323
module.exports=function(context){
2424
constmissingCheckNodes=[];
2525
constrequireNodes=[];
26+
varcommonModuleNode=null;
2627
varhasSkipCall=false;
2728

2829
functiontestCryptoUsage(node){
2930
if(utils.isRequired(node,requireModules)||
3031
utils.isBinding(node,bindingModules)){
3132
requireNodes.push(node);
3233
}
34+
35+
if(utils.isCommonModule(node)){
36+
commonModuleNode=node;
37+
}
3338
}
3439

3540
functiontestIfStatement(node){
@@ -75,7 +80,20 @@ module.exports = function(context){
7580

7681
functionreport(nodes){
7782
nodes.forEach((node)=>{
78-
context.report(node,msg);
83+
context.report({
84+
node,
85+
message: msg,
86+
fix: (fixer)=>{
87+
if(commonModuleNode){
88+
returnfixer.insertTextAfter(
89+
commonModuleNode,
90+
'\nif (!common.hasCrypto){'+
91+
' common.skip("missing crypto");'+
92+
'}'
93+
);
94+
}
95+
}
96+
});
7997
});
8098
}
8199

‎tools/eslint-rules/rules-utils.js‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@ module.exports.isRequired = function(node, modules){
1212
modules.includes(node.arguments[0].value);
1313
};
1414

15+
/**
16+
* Return true if common module is required
17+
* in AST Node under inspection
18+
*/
19+
varcommonModuleRegExp=newRegExp(/^(\.\.\/)*common(\.js)?$/);
20+
module.exports.isCommonModule=function(node){
21+
returnnode.callee.name==='require'&&
22+
node.arguments.length!==0&&
23+
commonModuleRegExp.test(node.arguments[0].value);
24+
};
25+
1526
/**
1627
* Returns true if any of the passed in modules are used in
1728
* binding calls.

0 commit comments

Comments
(0)