eslint-plugin-intl-mobile
Version:
Intl Mobile ESLint Rules.
63 lines (56 loc) • 1.6 kB
JavaScript
// 用于检测 rpc 中不包含传递 number 类型参数
;
const { get, forEach } = require('lodash');
const desc = 'RPC Request do not pass parameter with number type';
function hasNumberParameter(node) {
let hasNumber = false;
const params = get(node, 'arguments.1.properties') || [];
const keys = Object.keys(params).filter(key => /^\d+$/.test(key));
forEach(keys, key => {
if(typeof get(params[key], 'value.value') === 'number') {
hasNumber = true;
return false;
}
});
return hasNumber;
}
function isRequestFunction(name) {
return /request|query|fetch|submit|getData|service|send|ajax|rpc|xhr/ig.test(name);
}
module.exports = {
meta: {
type: 'suggestion',
docs: {
description: desc,
category: 'Best Practices',
},
},
create: function(context){
return {
CallExpression(node) {
// 显示判断 my.call('rpc')
if (
(
(get(node, 'callee.object.name') === 'call' ||
get(node, 'callee.property.name') === 'call') &&
get(node, 'arguments.0.value') === 'rpc'
)
) {
if (hasNumberParameter(node)) {
context.report(node, desc);
}
}
// 判断关键字
if (
isRequestFunction(get(node, 'callee.name')) ||
isRequestFunction(get(node, 'callee.object.name')) ||
isRequestFunction(get(node, 'callee.property.name'))
) {
if (hasNumberParameter(node)) {
context.report(node, desc);
}
}
}
}
},
}