术语表
此页面作为与 ESLint 相关的常用术语的参考。
A
抽象语法树 (AST)
代码语法的结构化表示。
AST 中的每一段源代码都称为 节点。每个节点可以有任意数量的属性,包括存储子节点的属性。
ESLint 使用的 AST 格式是 ESTree 格式。
ESLint 规则会接收一个 AST,并在检测到 违规时,在 AST 的某些部分生成 违规。
C
配置文件 (Configuration File)
包含 ESLint 如何解析文件和运行 规则的首选项的文件。
ESLint 配置文件命名方式为 eslint.config.(c|m)js。每个配置文件导出一个 配置数组,其中包含 配置对象。
例如,这个 eslint.config.js 文件在error 严重性下启用了 prefer-const 规则
import { defineConfig } from "eslint/config";
export default defineConfig([
{
rules: {
"prefer-const": "error",
},
},
]);
有关更多详细信息,请参阅 配置文件。
配置数组
每个配置文件导出一个配置对象数组。数组中的对象按顺序进行评估:后面的对象可能会覆盖前面对象中指定的设置。
有关更多详细信息,请参阅 配置文件。
配置对象
一个 配置文件条目,指定了 ESLint 需要在文件集上执行的所有信息。
每个配置对象可以包含描述要在哪些文件上运行、如何处理不同文件类型、包含哪些 插件以及如何运行 规则的属性。
有关更多详细信息,请参阅 配置文件 > 配置对象。
E
ESQuery
ESLint 用于解析 选择器语法以查询 节点在 AST 中的库。
ESQuery 解释 CSS 语法以获取 AST 节点属性。ESQuery 选择器的示例包括
BinaryExpression:选择所有类型为BinaryExpression的节点BinaryExpression[operator='+']:选择所有BinaryExpression节点,其operator为+BinaryExpression > Literal[value=1]:选择所有Literal节点,其value为1,其直接父节点为BinaryExpression
有关 ESQuery 格式的更多信息,请参阅 github.com/estools/esquery。
ESTree
ESLint 用于表示 JavaScript 语法作为 AST 的格式。
例如,代码 1 + 2; 的 ESTree 表示形式大致如下
{
"type": "ExpressionStatement",
"expression": {
"type": "BinaryExpression",
"left": {
"type": "Literal",
"value": 1,
"raw": "1"
},
"operator": "+",
"right": {
"type": "Literal",
"value": 2,
"raw": "2"
}
}
}
静态分析工具(如 ESLint)通常通过将语法转换为 ESTree 格式的 AST 来运行。
有关 ESTree 规范的更多信息,请参阅 github.com/estree/estree。
F
修复 (Fix)
修复通常“安全”地自动应用:它们不应导致代码行为更改。ESLint 尝试在运行带有 --fix 标志时,在 报告中应用尽可能多的修复,但不能保证应用所有修复。修复也可以由常见的编辑器扩展程序应用。
规则违规还可能包含以 建议形式呈现的不安全且不能自动应用的文件更改。
扁平配置 (Flat Config)
ESLint 当前的配置文件格式。
扁平配置文件的命名格式为 eslint.config.(c|m)?js。“扁平”配置文件之所以命名为这样,是因为所有嵌套都必须在一个配置文件中完成。与此相反,“遗留”配置格式允许在项目的子目录中嵌套配置文件。
您可以在 ESLint 的新配置系统,第二部分:介绍扁平配置中了解有关扁平配置背后的动机的更多信息。
格式化程序 (Linting)
一个将 ESLint 生成的 报告呈现出来的包。
ESLint 附带了几个内置报告器,包括 stylish(默认)、json 和 html。
有关更多信息,请参阅 格式化程序。
格式化程序 (工具)
一个 静态分析工具,可以快速格式化代码,而不会更改其逻辑或名称。
格式化程序通常只修改代码的“琐碎”部分,例如分号、空格、换行符和一般的空白。琐碎更改通常不会修改代码的 AST。
生态系统中的常见格式化程序包括 Prettier 和 dprint。
请注意,虽然 ESLint 是一个 代码检查器而不是格式化程序,但 ESLint 规则也可以对源代码应用格式化更改。有关格式化规则的更多信息,请参阅 格式化 (Rule)。
格式化 (Rule)
仅针对 格式化问题(例如分号和空格)的规则。这些规则不会更改应用程序逻辑,并且是 风格化规则的一个子集。
ESLint 不再推荐格式化规则,并已弃用其内置的格式化规则。ESLint 建议使用专门的格式化程序,例如 Prettier 或 dprint。或者,ESLint Stylistic 项目提供了与格式化相关的 lint 规则。
有关更多信息,请参阅 格式化规则的弃用。
G
全局声明
对 ESLint 的描述,说明 JavaScript 全局变量在运行时应该存在。
全局声明告知 lint 规则检查全局变量的正确用法。例如,no-undef 规则将为未在配置的全局列表中定义的全局变量引用创建违规。
配置文件将全局变量定义为 JavaScript 对象。
有关配置全局变量的信息,请参阅 配置语言选项 > 指定全局变量。
全局变量
一个在全局范围内存在的运行时变量,这意味着所有模块和脚本都可以访问它。
JavaScript 中的全局变量在 globalThis 对象上声明(通常在 Node.js 中别名为 global,在浏览器中别名为 window)。
您可以使用 全局声明让 ESLint 知道您的代码使用了哪些全局变量。
I
内联配置 (Configuration Comment)
一个源代码注释,用于将规则配置为不同的严重程度和/或选项集。
内联配置使用与 配置文件类似的语法来指定按名称、新的严重程度和可选的新规则选项的任意数量的规则。例如,以下内联配置注释同时禁用了 eqeqeq 规则并将 curly 规则设置为 "error"
/* eslint eqeqeq: "off", curly: "error" */
有关内联配置注释的文档,请参阅 规则 > 使用配置注释。
L
遗留配置 (Legacy Config)
ESLint 的先前配置文件格式,现在已被 “扁平”配置取代。
遗留 ESLint 配置命名格式为 .eslintrc.*,允许在项目的子目录中的文件中嵌套。
您可以在 ESLint 的新配置系统,第一部分:背景中了解有关遗留配置生命周期的更多信息。
代码检查器 (Linter)
一个 静态分析工具,可以 报告在源代码上运行一组 规则的结果。每个规则可以报告源代码中的任意数量的 违规。
ESLint 是 JavaScript 和其他 Web 技术中常用的代码检查器。
逻辑规则 (Logical Rule)
一个 规则,用于检查代码如何运行以查找问题。
许多逻辑规则会查找可能发生的崩溃(例如 no-undef)、意外行为(例如 no-sparse-arrays)和未使用的代码(例如 no-unused-vars)。
您可以在 规则 > 可能的问题下查看 ESLint 附带的完整逻辑规则列表
N
节点 (Node)
一个 AST 中的一段代码。
每个节点代表在源代码中找到的一种语法类型。例如,1 + 2 在 1 + 2; 的 AST 中是一个BinaryExpression。
请参阅 #esquery,了解 ESLint 用于解析 选择器的库,这些选择器允许 规则搜索节点。
O
覆盖 (Override)
当 配置对象或 内联配置设置新的严重程度和/或规则选项,从而取代先前设置的严重程度和/或选项时。
以下 配置文件将 no-unused-expressions 从 "error" 覆盖为 "off" 在 *.test.js 文件中
import { defineConfig } from "eslint/config";
export default defineConfig([
{
rules: {
"no-unused-expressions": "error",
},
},
{
files: ["*.test.js"],
rules: {
"no-unused-expressions": "off",
},
},
]);
以下 内联配置将 no-unused-expressions 设置为 "error"
/* eslint no-unused-expressions: "error" */
有关遗留配置中的覆盖的更多信息,请参阅 配置文件(已弃用)> 覆盖是如何工作的?。
P
解析器 (Parser)
一个包含读取字符串并将其转换为标准化格式的方法的对象。
ESLint 使用解析器将源代码字符串转换为 AST 形状。默认情况下,ESLint 使用 Espree 解析器,该解析器生成与标准 JavaScript 运行时和版本兼容的 AST。
自定义解析器允许 ESLint 解析非标准 JavaScript 语法。通常,自定义解析器包含在可共享的配置或插件中,因此您不必直接使用它们。例如,@typescript-eslint/parser 是包含在 typescript-eslint 项目中的自定义解析器,它允许 ESLint 解析 TypeScript 代码。
有关在 ESLint 中使用解析器的更多信息,请参阅 配置解析器。
插件 (Plugin)
插件的一个常见用例是强制执行框架的最佳实践。例如,@angular-eslint/eslint-plugin 包含使用 Angular 框架的最佳实践。
有关更多信息,请参阅 配置插件。
处理器 (Processor)
一个插件的一部分,用于从其他类型的文件中提取 JavaScript 代码,然后让 ESLint 检查 JavaScript 代码。
例如,@eslint/markdown 包含一个处理器,可以将 Markdown 文件中 ``` 代码块的文本转换为可以进行检查的代码。
有关配置处理器的更多信息,请参阅 插件 > 指定处理器。
R
报告 (Report)
来自一次 ESLint 运行的 违规 集合。
当 ESLint 在源代码文件上运行时,它会将每个源代码文件的 AST 传递给每个配置的 规则。每个规则的违规集合将被打包在一起,并传递给一个 格式化程序,以呈现给用户。
规则 (Rule)
检查 AST 是否符合预期模式的代码。当规则的期望未满足时,它会创建一个 违规。
ESLint 提供大量规则,用于检查常见的 JavaScript 代码问题。更多的规则可以通过 插件 加载。
有关提供的规则的概述,请参阅 核心概念 > 规则。
S
选择器 (Selector)
ESLint 规则 使用 ESQuery 选择器来查找应检查的节点。
严重性 (Severity)
规则配置为运行的报告级别,如果有的话。
ESLint 支持三种严重程度级别
"off"(0): 不运行该规则。"warn"(1): 运行该规则,但不要根据其违规行为以非零状态码退出(不包括--max-warnings标志)"error"(2): 运行该规则,如果产生任何违规行为,则以非零状态码退出
有关配置规则的文档,请参阅 配置规则。
可共享配置 (Configuration)
提供预定义 配置文件 配置的模块。
可共享的配置可以配置来自配置文件的所有相同信息,包括 插件 和 规则。
可共享的配置通常与 插件 一起提供。许多插件提供带有“recommended”(推荐)等名称的可共享配置,以启用其建议的起始规则集。例如,eslint-plugin-solid 提供了一个可共享的推荐配置
import { defineConfig } from "eslint/config";
import js from "@eslint/js";
import solid from "eslint-plugin-solid/configs/recommended";
export default defineConfig([js.configs.recommended, solid]);
有关可共享配置的信息,请参阅 共享配置。
静态分析 (Static Analysis)
分析源代码而不构建或运行它的过程。
代码检查器(例如 ESLint)、格式化程序 和 类型检查器 是静态分析工具的示例。
静态分析与动态分析不同,动态分析是在构建和执行源代码后评估源代码的过程。单元测试、集成测试和端到端测试是动态分析的常见示例。
风格化 (Rule)
一种强制执行偏好而不是逻辑问题的规则。风格领域包括 格式化规则、命名约定以及等效语法之间的一致选择。
ESLint 内置的风格规则已冻结功能:除了支持新的 ECMAScript 版本外,它们将不会接收新功能。
有关更多信息,请参阅 我们规则策略的变更 和 格式化规则的弃用。
建议 (Suggestion)
对 规则 违规 的可选增强,描述了如何手动调整代码以解决违规行为。
建议通常不安全地自动应用,因为它们会导致代码行为发生变化。ESLint 不直接应用建议,但会向可以选择应用建议的集成提供建议(例如编辑器扩展)。
规则违规还可能包括可以自动应用的安全文件更改,形式为 修复。
T
类型检查器 (Type Checker)
一种 静态分析 工具,用于构建对项目代码结构和数据形状的完整理解。
类型检查器通常比代码检查器更慢、更全面。虽然代码检查器传统上一次只对单个文件或代码片段的 AST 进行操作,但类型检查器了解跨文件依赖关系和类型。
TypeScript 是 JavaScript 最常用的类型检查器。typescript-eslint 项目提供了允许在 lint 规则中使用类型检查器的集成。
V
违规 (Violation)
来自 规则 的指示,表明代码的某个区域不符合规则的期望。
规则违规行为指示源代码中的一个范围以及解释违规行为的错误消息。违规行为还可能包括 修复 和/或 建议,以指示如何改进违规代码。