请描述 Eslint 执行代码检查的完整流程,包括从解析源码到生成检查结果的各个阶段。
考察说明
考查对 Eslint 内部工作流程的理解,包括解析、遍历、规则匹配与报告等核心机制。
回答思路
- 【回答框架 1】Eslint 的检查流程以源码文本为输入,首先通过解析器将代码转换为 AST(抽象语法树)。Eslint 默认使用 espree 作为解析器,支持 ES6 及更高版本的语法,也允许配置自定义解析器如 @typescript-eslint/parser。
- 【回答框架 2】AST 生成后,Eslint 会利用 linter 模块进行 AST 遍历。遍历过程采用深度优先的方式,同时维护一个作用域和引用上下文,为后续规则执行提供必要信息。
- 【回答框架 3】在遍历过程中,Eslint 会按规则数组依次执行每条规则。每条规则都是一个访问者函数集合,针对特定的 AST 节点类型触发回调,规则内部通过 context.report 等方式报告问题。
- 【回答框架 4】所有规则执行完毕后,Eslint 收集所有报告的 problem 对象,并依据配置的格式(如 stylish、json)生成输出。同时会执行 fix 循环:若有可自动修复的规则,会应用修改并重新检查,但会受 fix 次数限制。
- 【关键点 1】解析阶段将源码转为 AST,解析器可配置。
- 【关键点 2】遍历阶段深度优先遍历 AST,并维护作用域信息。
- 【关键点 3】规则通过访问者模式在特定节点执行,用 context.report 报告问题。
- 【关键点 4】问题收集后按格式输出,可配置自动修复并限制循环次数。
- 【关键点 5】整个过程支持自定义解析器和规则集,体现可扩展性。
- 【易错点 1】不要认为 AST 包含完整代码文本,它只保留语法结构。
- 【易错点 2】不要忽略 fix 循环是有限次的,并非无限修复。
- 【易错点 3】不要混淆解析器与规则:解析器只负责生成 AST。