为什么我的自定义ESLint规则无法正确触发?
我在开发一个检查函数参数数量的ESLint插件,规则逻辑写好了但总不生效。比如写个加法函数:add(a, b)应该通过,但调用add(a)时规则没报错。
规则配置是这样的:
module.exports = {
meta: { ... },
create(context) {
return {
CallExpression(node) {
if (node.callee.name === 'add' && node.arguments.length !== 2) {
context.report({
node,
message: 'add必须接收两个参数'
});
}
}
};
}
};
测试用例明明符合条件,控制台却没有任何输出。我尝试在回调函数里加console.log('test')调试,发现这个方法根本没被调用过。是不是访问者模式的节点类型写错了?或者需要额外配置什么选项?
CallExpression没问题,但你漏了配置规则的meta.schema和测试环境的规则启用部分。直接复制下面的代码:另外,检查下你的 ESLint 配置文件,确保规则已经正确加载和启用。比如:
最后提醒一下,调试的时候不要只靠
console.log,可以在create方法里加个断点,确保规则注册进去了。我之前也踩过类似的坑,折腾半天发现是规则没启用来着。