早在 7 月份,我们就宣布了 ESLint 的未来计划。公告中的一部分内容讨论了将 ESLint 转变为更通用的代码风格检查工具,使其能够检查任何语言的代码。ESLint 的许多核心功能(例如查找文件、解析文件、报告问题)都是通用的,因此我们在过去几个月里提取了核心代码中与 JavaScript 相关的部分。我们很高兴地宣布,这项工作已经取得了成果,ESLint 现在可以检查 JSON 和 Markdown 代码了!
使用 @eslint/json
进行 JSON 代码风格检查
JSON 代码风格检查是通过使用 @eslint/json
插件实现的,这是一个官方支持的语言插件。该插件提供对 JSON、JSONC(带注释的 JSON)和 JSON5 的解析功能。要使用该插件,请从 npm 安装它。
npm install @eslint/json -D
然后更新配置文件
import json from "@eslint/json";
export default [
{
plugins: {
json,
},
},
// lint JSON files
{
files: ["**/*.json"],
language: "json/json",
rules: {
"json/no-duplicate-keys": "error",
},
},
];
插件内置了一些规则,我们也希望收到更多建议。有规则的想法吗?提交问题。
有关配置 JSON 代码风格检查的更多信息,请查看 README。
使用 @eslint/markdown
进行 Markdown 代码风格检查
Markdown 代码风格检查是通过使用 @eslint/markdown
插件实现的,它是 eslint-plugin-markdown
插件的下一代版本,后者只包含一个处理器。这个新的官方支持的语言插件具有对 CommonMark 和 GitHub Flavored Markdown 的解析和规则。要使用该插件,请从 npm 安装它。
npm install @eslint/markdown -D
然后更新配置文件
// eslint.config.js
import markdown from "@eslint/markdown";
export default [
{
files: ["**/*.md"],
plugins: {
markdown
},
language: "markdown/commonmark",
rules: {
"markdown/no-html": "error"
}
}
];
与 JSON 插件类似,该插件也内置了一些规则,我们也希望收到更多建议。有规则的想法吗?提交问题。
有关配置 Markdown 代码风格检查的更多信息,请查看 README。
创建自定义规则和使用代码浏览器
@eslint/json
和 @eslint/markdown
都将源代码解析成 AST,然后遍历 AST 来运行规则,就像 ESLint 对 JavaScript 所做的那样。这意味着您可以像为 JavaScript 创建自定义规则一样为 JSON 和 Markdown 创建自定义规则。主要区别在于 AST 格式。JSON 使用 Momoa AST,而 Markdown 使用 mdast。由于没有太多资源可以帮助您检查其他 AST 格式,我们很高兴地宣布推出 代码浏览器。
代码浏览器允许您查看和探索不同语言的 AST,以帮助创建自定义规则。对于 JSON 和 Markdown,您将获得 AST 的可扩展视图,而 JavaScript 则允许您不仅看到 AST,还可以看到 ESLint 在解析代码时生成的范围和代码路径信息。未来,我们将继续更新代码浏览器,加入新的语言和功能,以帮助您创建自定义规则。
最棒的是?代码浏览器是 开源 的,因此您可以帮助我们使其变得更好。
编写自己的语言插件
ESLint 语言的设计方式使得它们可以使用新的 languages
键包含在任何插件中。@eslint/json
和 @eslint/markdown
插件不仅旨在分别提供 JSON 和 Markdown 的代码风格检查,而且也是创建自己的语言的示例。您可以查看 语言文档,以概述如何创建自己的语言。
结论
检查除 JavaScript 之外的其他语言的代码风格检查一直是 ESLint 的路线图,因此能够达到这一里程碑令人兴奋。我们的长期目标是确保 ESLint 可以检查 Web 项目中可能使用的任何类型的文件,无论是使用官方支持的语言插件还是社区编写的插件。有了 JavaScript、JSON 和 Markdown,我们已经朝着实现这一目标迈出了坚实的一步。
提醒一下,ESLint 是一个独立的开源项目,由一群志愿者在业余时间维护。如果您喜欢使用 ESLint,请与您的公司讨论赞助该项目。