UNPKG

eslint-plugin-intl-mobile

Version:

Intl Mobile ESLint Rules.

63 lines (56 loc) 1.6 kB
// 用于检测 rpc 中不包含传递 number 类型参数 'use strict'; 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); } } } } }, }