不久前我遇到了同样的问题,所以我可以帮助您编写自己的问题。
所以,首先,让我们解释一些基本结构:
ESLint
有插件,每个插件都有规则。
ESLint
使用AST(一种语法树)来查找代码中的特定部分。这有助于 ESLint 找到每个规则正在寻找的内容。
所以,让我们从创建一个包含规则的插件开始:
1. 使用 Yeoman 的 ESLint 生成器
这使事情变得容易得多。在这里查看。
安装yeoman
后yeoman eslint generator
:
- 进入您要在其中创建项目的文件夹
- 运行
yo eslint:plugin
以创建一个新ESLint
插件
- 创建插件后,
yo eslint:rule
在同一文件夹中运行
我用作suni
插件名称,并check-as-mutable
用作规则名称。现在我们有了编写规则所需的所有初始文件。
2. 知道使用 AST Explorer 需要寻找什么
AST Explorer可以帮助我们找到我们正在寻找的东西类型。这很重要,因此我们可以告诉ESLint
我们希望函数在代码中运行的内容。
当您将代码粘贴到AST Explorer中时,它会向您显示所ESLint
看到的内容。我们要针对所有MemberExpression
s:
something.
asMutable
();
在里面,我们想要Identifier node
检查函数名
3.编写插件本身
打开lib/rules/check-as-mutable.js
并检查一下。您提供的所有数据Yeoman
都用于填写此处的某些字段。
在规则内部,您有一个create
属性。在这里,我们编写代码。这个函数应该返回一个对象,我们希望我们的规则作为属性运行。所以,在这种情况下,它看起来像这样:
create: function(context) {
return {
MemberExpression: function(node)...
};
}
在编写规则时,您应该使用AST Explorer
.
这是实现:
create: function(context) {
var UNWANTED_FUNCTION_NAME = 'asMutable';
return {
MemberExpression: function reportUnwantedName(node) {
var functionName = node.property.name;
if (functionName === UNWANTED_FUNCTION_NAME) {
context.report({
node: node,
message: [
'Please don\'t use ',
UNWANTED_FUNCTION_NAME,
'. We don\'t like it!'].join('')
});
}
}
};
}
之后,您需要在项目中安装插件。为此,请将其上传到 GitHub,并使用 npm 安装:
npm install --save-dev <user_name>/<repository_name>
并将规则也包含在您的.eslintrc
文件中:
{
'plugins': ['suni'],
'rules': {
'suni/check-as-mutable': 1
}
}
请注意,我给了它 value 1
。这使得该规则显示为警告而不是错误
请注意,警告突出显示了 Immutable 本身,因为那是node
我们传递给context.report
. 您可以调整它以突出显示id node
。
这是我为此答案创建的插件
祝你好运!