我不知道您是否使用了ESLINT注释的配置:
Eslint支持Eslint-Disable,Eslint-Enable,Eslint-Disable-next-line等。内部配置指定是否效用规则,称为Inline Config。
WebPack中还有这种配置方法。在向魔术注释引入模块时,您可以配置代码分割。
同样,Terser还具有这种称为宣传的机制。它可以指定某个API是否纯净。如果未在纯函数中使用它,则可以直接删除。
可以看出,许多库通过注释使用这种配置方法。无论是称为注释,魔术评论还是内联配置,都指的是同一件事。
既然它是如此常见的配置,那么它们是如何实现的?
让我们看一下ESLINT内联配置的实现。
ESLINT将使用源代码为AST,然后将AST检查为一系列检查的规则。检查结果将以格式化为格式。
评论的配置在哪里?
我简化了源代码,就是这样:
可以看出,总体过程是:
换句话说,ESLINT的内联配置在棉绒完成AST后是有效的,在获得各种proflems后生效,并在Privems过滤。
那么您如何从AST获取指令?如何过滤问题?
让我们来看看。
从AST删除指令码后,就是这样:
实际上,这是与AST中所有注释的内容的常规匹配。如果指令支持它,请收集并记录相应的等级。
之后,它被过滤出来的问题。
简化的源代码是这样:
我们关心:
我们想滤除问题中残疾规则报告的预言,并返回过滤后的预言。
您可以维护残疾人图以指示禁用规则。
对于每个问题,指令的信息根据数字数字从残障指导中获取,并将相应的规则放置在disabledrulemap中。
然后,查看PRELEM的规则是否被禁用,即,是否处于禁用卢比普中,如果是的话,它将被过滤。
处理此操作后,可以报告返回的预言。
这是Eslint的Eslint-Disable,Eslint-Enable,Eslint-Disable-Next-Line和其他可以配备规则是否生效的原则的评论。
ESLINT根据等级编号找到相应的评论。实际上,许多AST会记录与每个节点相关的评论。
例如,Babel的AST:
通过这种方式,您可以根据AST进行注释,然后确定它是否是通过规律性的指令。
通过等级编号找到评论,并通过AST找到关联的评论,这是找到注释的两种方法。
注释中的配置应用于Eslint,WebPack,Terser等工具中,即内联配置,魔术评论,宣传,但它们都指的是同一件事。
他们都在AST中找到评论,在常规匹配下使用指令(说明),然后取出相应的信息。
找到指令后,您还必须找到指令生效的地方。您可以找到两种方法:一个是基于等级的比较,另一个是根据相关的AST进行的。
找到指令和相应的位置后,您可以根据指令中的信息进行各种处理。
ESLINT在呼叫后打电话后获得所有私人,并按照等级号码进行匹配,并根据禁用规则过滤一些问题。
注释中的配置是一种相对常见的配置方法,适用于某些本地配置。理解其实现原理可以使我们能够更好地掌握这种机制。
