当前位置: 首页 > 网络应用技术

ESLINT的实现原理实际上非常简单

时间:2023-03-07 01:01:14 网络应用技术

  ESLINT是我们每天使用的工具。我们将使用其CLI或API进行代码错误检查和格式检查。有时,我们还为定制检查和维修编写一些规则。

  尽管我们每天都使用它,但我们很少了解它是如何实现的。了解ESLINT的实现原理可以帮助我们更好地使用它并编写一些插头。

  因此,我们将使用源代码通过源代码探索ESLINT的实现原理。

  Linter是ESLINT的核心类别。它提供了这些API:

  Sourcecode指的是AST(抽象语法树)。解析器由源代码字符串解析为AST,规则是我们配置的AST规则。这些API易于理解。

  Linter的主要功能在验证和验证和验证中实现。当命令行指定或配置文件规格时,将调用验证和修复代码,否则验证将调用以进行检查。

  验证和修复是如何实现的?这是ESLINT的核心部分:

  我们知道,根据AST检查ESLINT规则,因此我们必须首先是解析,因为AST.ESLINT的解析器也可以切换。您需要首先查找解析器:

  ESPREE带有默认值是ESLINT,也可以通过配置将其切换到另一个解析器,例如 @Eslint/babel-parser, @typescript/eslint-parser,等等。

  以下是Resolve Parser的逻辑:

  确认解析器后,是调用解析方法。

  解析器的解析方法将分析源代码为AST,在ESLINT中,它由SourceCode封装。查看Sourcecode后来引用AST。

  使用AST,您可以调用规则以检查AST

  解析后,将调用Runrules方法检查AST。退货结果是私人,也就是说,有关如何维修的任何错误和信息。

  那么Runrules如何运行规则?

  规则的实现如下,即注册要检查的AST,这与Babel插件类似。

  Runrules可以穿越AST,然后遇到不同AST的不同事件。规则将监控哪些事件来处理AST会聆听的内容,以便通过聆听事件的方法,您可以在此过程中执行不同的规则遍历AST。

  注册听众:

  像AST一样,发出不同的事件,触发听众:

  这样,在遍历AST之后,所有规则都被称为规则的运行机理。

  此外,它将在遍历过程中传递到上下文中,可以在规则中获得,例如范围,设置等。

  和rulecontext,您可以在致电AST的听众时得到它:

  该报告API报告了规则,因此您可以收集所有错误并打印它们。

  这是什么问题?

  覆盖覆盖问题是检查的结果,这是从哪个行(端线)和哪些错误的线。

  还有如何维修(修复),维修实际上是从出价到竞标(范围)到哪个文本(文本)的。

  为什么FIX的结构(例如范围返回和文本)?因为其实现是简单的字符串替换。

  在遍历AST,呼叫所有规则,收集裁剪的预言之后,您可以执行修复。

  修复部分的相关源代码是这样:

  也就是说,检查了验证,然后根据修复信息自动修复。

  修复实际上是一个替代字符串:

  一些学生可能会注意到为什么要替换字符串替换?

  因为多个修复程序之间的范围可能被重叠。如果有重叠,下次将进行修理,以便对While循环进行维修10次。如果修复程序未固定,则不会修复。

  这是FIX实施的原则。它是由字符串替换实现的。

  实际上,核心验证和修复的核心是上面的核心,但是ESLINT也支持以前的和以后的处理。也就是说,Pre和Post和Post的进度,也在插件中定义。

  先前的处理是分析JS文件的非JS文件,该文件类似于WebPack的加载程序,这使ESLINT PROCESS成为非-JS文件的柔软。

  稍后呢?那一定是有效的,也就是说,消息可以过滤一些消息或进行一些修改。

  预处理和后过程如何实现?

  这是相对简单的,只需在验证之前和之后致电。

  我们知道,ESLINT还通过这样的注释支持配置。

  它是如何实现的?

  注释的配置是通过扫描AST收集所有配置。该配置称为评论指导,即ESLINT线是否生效。

  然后在验证结束时,对收集的绒毛私人进行过滤。

  这些是实施ESLINT的原则:

  Linter已实现核心功能。我们已经在上面介绍了它,但是按照命令行的顺序,您需要处理一些命令行参数,因此您需要打包一层cliengine来读取和写文件,分析命令行参数的命令行参数

  它具有基于linter类的上层包装等API,例如executeOnfiles和executeOntext。

  但是克利昂宁没有直接暴露它,而是包装了一层ESLINT类。这只是一个相对容易的外观,隐藏了一些无关紧要的信息。

  让我们看一下Eslint最终暴露的API:

  我们通过源代码阐明了ESLINT的实施原则:

  ESLINT的核心类别是Linter,该类别被分为这样的步骤:

  除了Core Linter类外,还有用于处理配置和读写文件的Cliengine类,以及最终暴露的ESLINT类。

  这是ESLINT的实现原则,但实际上非常简单:

  基于AST,基于字符串以及之前和之后的修复,有前后过程,该过程支持注释以配置以滤除一些问题。

  清除了这些合理性后,即使在源代码级别,ESLINT也得到了掌握。