ESLint¶
ESLint 是一个流行的 JavaScript 代码风格检查工具。ESLint 集成还使用 Prettier 来强制执行代码格式。
本地运行¶
可以使用 mach 运行 ESLint 的 mozlint 集成
$ mach lint --linter eslint <file paths>
或者,省略 --linter eslint
并运行所有已配置的代码风格检查工具,其中包括 ESLint。
ESLint 还支持 --fix
选项来自动修复大多数规则引发的错误。
有关更多选项,请参阅 使用指南。
自定义配置¶
我们的 ESLint 配置具有一些自定义配置,根据文件路径和名称模式为各种代码定义全局变量和规则。
使用正确的模式可以帮助 ESLint 了解正确的细节,以便您不会收到有关未定义或未使用变量的警告。
.mjs
- 模块文件。.sys.mjs
- 系统模块,这通常是加载它的进程中的单例。.worker.(m)js
- web worker 文件。使用 ctypes 的 worker 应该使用
/* eslint-env mozilla/chrome-worker */
测试文件,请参阅有关 添加测试 的部分
理解规则和错误¶
仅检查部分文件,有关详细信息,请参阅 配置。
根据设计,我们不会检查/格式化 reftests 和 crashtests,因为这些是专门设计的测试。
如果您不理解某个规则,可以在 eslint.org 的规则列表 中查找有关该规则的更多信息。
对于 Mozilla 特定的规则(带有 mozilla/ 前缀),请参阅以下内容以获取更多详细信息
启用新规则和添加插件¶
请参阅 此页面以启用新规则。
常见问题及解决方法¶
我的编辑器提示 mozilla/whatever
未知¶
运行
./mach eslint --setup
,然后重新启动编辑器。
我的编辑器无法识别我新添加的全局变量(例如,添加到内容文件或 head.js 文件中)¶
这是一个限制,它与我们的 ESLint 设置以及我们如何在文件之间共享全局变量的方式有关。
重新启动编辑器应该会获取新的全局变量。
您始终可以通过在命令行上运行
./mach lint --linter eslint <file path>
进行双重检查。
我收到代码风格检查错误“未知的服务成员属性”¶
确保将所有新的服务添加到 tools/lint/eslint/eslint-plugin-mozilla/lib/services.json
中。例如,在构建后从 <objdir>/xpcom/components/services.json
中复制。
我正在添加测试,如何设置正确的配置?¶
请注意,我们更喜欢将测试放在命名目录中,因为这使得开发人员更容易识别正在使用的测试类型。此外,如果不进行构建步骤(这会破坏编辑器)或代价高昂的加载周期,则无法根据 .ini 文件将 ESLint 规则的范围限定到单个文件。
如果测试的目录路径是 已知路径 之一,则 ESLint 将对该测试类型执行正确的操作。这是首选选项。
例如,将 xpcshell-tests 放置在
browser/components/foo/test/unit/
中将正确设置 ESLint。
如果您确实无法匹配目录名称,例如
browser/base/content/tests/*
,则需要在 .eslintrc-test-paths.js 中添加一个新条目。
请勿在单个目录中添加多种类型的测试的新情况,这 难以由 ESLint 处理。目前这可能会导致
规则错误地应用于错误类型的测试文件。
测试中全局变量的额外定义,这意味着在某些情况下不会触发未定义变量规则。
这段代码不应该被代码风格检查或格式化¶
如果是第三方代码片段,请将其添加到 ThirdPartyPaths.txt 中。
如果是生成的文件,请将其添加到 Generated.txt 中。
如果故意无效,请将其添加到 .eslintrc-ignores.js 中。
这段代码不应该被格式化¶
绝大多数代码都应该被格式化,但是我们允许一些有限的情况下这样做是有意义的,例如
数组中的表格,以表格形式布局使其更易读。
其他结构或函数调用,在特定格式下布局更易读。
要为类似这样的代码禁用 prettier,可以在您希望禁用它之前的那一行使用 // prettier-ignore
。有关更多信息,请参阅 prettier 忽略文档。
我的有效代码触发了 no-undef
规则或无法解析¶
请勿将其添加到 .eslintrc-ignores.js 中。通常可以修复此问题,如果以下提示没有帮助,请 寻求帮助。
如果您正在添加新的测试目录,请参阅 上文
如果您正在编写加载到特殊环境(例如,框架脚本)中的脚本,则可能需要告诉 ESLint 使用每个情况的 环境定义
/* eslint-env mozilla/frame-script */
我使用
Services.scriptloader.loadSubScript
/* import-globals-from relative/path/to/file.js
配置¶
全局配置文件位于 topsrcdir/.eslintrc
中。可以通过在相应的子目录中包含 .eslintrc
来覆盖此全局配置。有关支持配置的概述,请参阅 ESLint 的文档。
请尽量减少树中规则的差异。我们希望保持一致,以便于开发人员使用。
源代码¶
构建器¶
Mark Banner (standard8) 负责构建器。您也可以在 Matrix 上的 #lint:mozilla.org 上提出问题。
ESLint (ES)¶
这是一个一级任务。对于测试失败,应回退导致问题的补丁或修复问题。
可以使用 ./mach eslint --fix path/to/file
修复某些失败。
对于测试工具问题,请在开发者基础设施 :: 代码风格检查和格式化中提交 Bug。
ESLint-build (ES-B)¶
这是一个二级任务,每天 UTC 午夜通过 cron 作业运行一次。
它目前运行 ESLint 规则以及两个附加规则
这两个规则都需要构建工件。
要手动运行它们,您可以运行
MOZ_OBJDIR=objdir-ff-opt ./mach eslint --rule "mozilla/valid-ci-uses: error" --rule "mozilla/valid-services-property: error" *
对于测试失败,可以通过以下方式找到导致回归的 Bug
确定最近是否更改了报告错误的文件。
查看是否有关联的
.idl
文件被更改。
如果无法轻松找到导致回归的 Bug,请在发生故障的文件的相关产品/组件中提交 Bug,并抄送 :standard8。
对于测试工具问题,请在开发者基础设施 :: 代码风格检查和格式化中提交 Bug。