Sun*_*uni 8 javascript eslint seamless-immutable
在我们当前的项目中,我们遇到了一些反复出现的问题,人们使用'asMutable'来实现无缝不可变,而实际上并不是必需的.这导致'search project for string"asMutable"'成为每个pull请求的一部分.为了加快速度,我们想在我们的队列中添加一条规则警告.但我还没弄明白怎么做.
对我来说似乎是最好的解决方案,虽然我对建议持开放态度,这是一条允许我指定禁止的函数名称的规则.ESlint或插件是否具有这种功能?
我看起来有点自己编写,但我被AST和创建第一条规则的启动困难所吓倒.如果我找不到更好的答案,我可能会冒险尝试,是的,我们在PR中得到足够的保证.这似乎比我更聪明的人已经解决了,所以我宁愿跟随他们的脚步然后建立我自己的脚步.
Eri*_*ton 13
当你将 ESLint 的no-restricted-syntax
规则与selectors
. 在您的情况下,您应该能够在不编写自己的插件的情况下实现所需的 linting。该规则类似于:
{
rules: {
'no-restricted-syntax': [
'error',
{
message: "Please don't use asMutable. We don't like it!",
selector:
'MemberExpression > Identifier[name="asMutable"]'
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
研究文档页面selectors
;它非常灵活!
Tha*_*guy 10
不久前我遇到了同样的问题所以我可以帮你编写自己的问题.
首先,让我们解释一些基本结构:
ESLint
有插件,每个插件都有规则.ESLint
使用AST作为语法树来查找代码中的特定部分.这有助于ESLint找到每个规则正在寻找的内容.那么,让我们首先创建一个带有规则的插件:
这使事情变得容易多了.检查它在这里.
在安装yeoman
和yeoman eslint generator
:
yo eslint:plugin
以创建一个新ESLint
插件yo eslint:rule
在同一文件夹中运行我用作suni
插件名称和check-as-mutable
规则名称.现在我们有了编写规则所需的所有初始文件.
AST资源管理器可以帮助我们找到什么类型,我们正在寻找的事情.这很重要,因此我们可以告诉ESLint
代码中我们希望运行函数的内容.
将代码粘贴到AST Explorer中时,它会显示ESLint
正在查看的内容.我们想要定位所有MemberExpression
s:
something.
asMutable
();
在里面,我们想要Identifier node
检查函数名称
打开lib/rules/check-as-mutable.js
并检查出来.您提供的所有数据Yeoman
都用于填写此处的某些字段.
在规则内部,您有一个create
属性.在这里,我们编写代码.这个函数应该返回一个对象,我们希望我们的规则作为属性运行.所以,在这种情况下,它看起来像这样:
create: function(context) {
return {
MemberExpression: function(node)...
};
}
Run Code Online (Sandbox Code Playgroud)
在编写规则时,您应该使用以下内容检查所需的字段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('')
});
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
之后,您需要在项目中安装插件.为此,将其上传到GitHub,并使用npm安装它:
npm install --save-dev <user_name>/<repository_name>
Run Code Online (Sandbox Code Playgroud)
并在您的.eslintrc
文件中包含规则:
{
'plugins': ['suni'],
'rules': {
'suni/check-as-mutable': 1
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我给了它值1
.这使得此规则显示为警告而不是错误
请注意,警告突出显示了Immutable本身,因为这是node
我们传递给的context.report
.您可以调整它以突出显示id node
.
祝好运!
Sta*_*Noy 10
除了@Eric Simonton 的回答之外,从 ESLint 3.5.0 开始,我们有了专门构建的无限制属性:
"no-restricted-properties": [ "error", {
"object": "Immutable",
"property": "asMutable",
"message": "optional explanation to the recurring problems we've had"
}]
Run Code Online (Sandbox Code Playgroud)
如果有人来这里寻找阻止不是类方法的函数的方法,您也可以类似地使用no-restricted-globals
归档时间: |
|
查看次数: |
292 次 |
最近记录: |