ESLint 支持对 JSON 和 Markdown 的代码检查


今年 7 月,我们宣布了 ESLint 未来的计划。部分公告提到将 ESLint 转变为一个更通用的代码检查工具,能够对任何语言进行检查。ESLint 的很多核心功能(如查找文件、解析文件、报告问题)都是通用的,因此过去几个月我们一直在提取核心中与 JavaScript 相关的部分。现在,我们很高兴地分享,这项工作已经取得了成果,使 ESLint 现在可以检查 JSON 和 Markdown 文件了!

使用 @eslint/json 进行 JSON 检查

通过 @eslint/json 插件可以实现对 JSON 的检查,这是一个官方支持的语言插件。该插件提供对 JSON、JSONC(带注释的 JSON)和 JSON5 的解析。要使用该插件,可以从 npm 安装它:

1
npm install @eslint/json -D

然后更新你的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import json from "@eslint/json";

export default [
{
plugins: {
json,
},
},

// 检查 JSON 文件
{
files: ["**/*.json"],
language: "json/json",
rules: {
"json/no-duplicate-keys": "error",
},
},
];

该插件内置了多条规则,我们也欢迎更多建议。如果你有规则的想法,可以提交一个 Issue。

更多关于配置 JSON 检查的信息,请查看 README。

使用 @eslint/markdown 进行 Markdown 检查

通过 @eslint/markdown 插件可以实现对 Markdown 的检查,这是 eslint-plugin-markdown 插件的下一代版本,后者仅包含处理器。而新版本是官方支持的语言插件,支持 CommonMark 和 GitHub 风格的 Markdown 解析及规则。要使用该插件,可以从 npm 安装它:

1
npm install @eslint/markdown -D

然后更新你的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// eslint.config.js
import markdown from "@eslint/markdown";

export default [
{
files: ["**/*.md"],
plugins: {
markdown
},
language: "markdown/commonmark",
rules: {
"markdown/no-html": "error"
}
}
];

与 JSON 插件类似,该插件内置了多条规则,也欢迎更多建议。如果你有规则的想法,可以提交一个 Issue。

更多关于配置 Markdown 检查的信息,请查看 README。

创建自定义规则和使用代码浏览器

@eslint/json 和 @eslint/markdown 都会将源代码解析成 AST(抽象语法树),然后遍历 AST 来运行规则,就像 ESLint 对 JavaScript 所做的一样。这意味着你可以像为 JavaScript 编写自定义规则一样为 JSON 和 Markdown 编写自定义规则。主要的区别在于 AST 的格式。JSON 使用的是 Momoa AST,而 Markdown 使用的是 mdast。由于目前帮助你检查其他 AST 格式的资源较少,我们很高兴地宣布推出代码浏览器

ESLint 代码浏览器

代码浏览器允许你查看和探索不同语言的 AST,有助于创建自定义规则。对于 JSON 和 Markdown,你将看到可展开的 AST 视图,而对于 JavaScript,你不仅可以看到 AST,还可以看到解析代码时 ESLint 生成的作用域和代码路径信息。今后,我们将继续为代码浏览器添加新的语言和功能,帮助你创建自定义规则。

最棒的是,代码浏览器是开源的,所以你也可以帮助我们让它变得更好。

编写你自己的语言插件

ESLint 语言设计成可以在任何插件中使用新的 languages 键。@eslint/json 和 @eslint/markdown 插件不仅用于提供对 JSON 和 Markdown 的检查,还可以作为如何创建自定义语言的示例。你可以查看语言文档,了解如何创建自己的语言。

结论

检查 JavaScript 以外的语言一直是 ESLint 路线图上的目标之一,因此我们很高兴能达到这一里程碑。我们的长期目标是确保 ESLint 能够检查任何 Web 项目中使用的文件,无论是通过官方支持的语言插件还是社区编写的插件。借助 JavaScript、JSON 和 Markdown,我们已经在实现这一目标的道路上迈出了重要一步。

最后提醒一下,ESLint 是一个由志愿者在业余时间维护的独立开源项目。如果你喜欢使用 ESLint,请和你的公司讨论赞助该项目的可能性。