ESLint 正式支持 JSON 和 Markdown 检查ESLint 团队近日宣布,ESLint 现已支持对 JSO
ESLint 团队近日宣布,ESLint 现已支持对 JSON 和 Markdown 文件进行代码检查。这标志着 ESLint 向提供语言无关的源代码代码检查平台迈出了重要的一步。
背景
早在七月份,ESLint 团队就发布了未来发展计划,提到将 ESLint 转型为更通用的 Linter,能够支持多种编程语言。经过几个月的努力,团队成功地提取了与 JavaScript 特定相关的核心功能,使 ESLint 现在能够对 JSON 和 Markdown 文件进行代码检查。
JSON 代码检查实现
JSON 的代码检查是通过官方支持的 @eslint/json
插件实现的。该插件支持 JSON、JSONC(带注释的 JSON)和 JSON5 的解析。用户可以通过以下命令安装插件:
npm install @eslint/json -D
安装完成后,需更新配置文件:
import json from "@eslint/json";
export default [
{
plugins: {
json,
},
},
// 检查 JSON 文件
{
files: ["**/*.json"],
language: "json/json",
rules: {
"json/no-duplicate-keys": "error",
},
},
];
该插件内置了多个规则,团队也期待更多的建议。如果您有规则的想法,欢迎提交问题。
有关配置 JSON 代码检查的更多信息,请查看 README 文档。
Markdown 代码检查实现
Markdown 的代码检查则是通过 @eslint/markdown
插件实现的,这是 eslint-plugin-markdown
插件的下一代版本,后者仅包含处理器。新插件支持 CommonMark 和 GitHub-Flavored Markdown 的解析和规则。用户可以通过以下命令安装插件:
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 插件同样内置了多个规则,团队也期待更多的建议。有关配置 Markdown 代码检查的更多信息,请查看 README 文档。
自定义规则与代码探索器
@eslint/json
和 @eslint/markdown
插件将源代码解析为抽象语法树(AST),并遍历 AST 以运行规则,这与 ESLint 处理 JavaScript 的方式相同。这意味着用户可以为 JSON 和 Markdown 编写自定义规则,主要区别在于 AST 格式。JSON 使用 Momoa AST,而 Markdown 使用 mdast。为了帮助用户检查不同的 AST 格式,团队推出了代码探索器(Code Explorer)。
代码探索器允许用户查看和探索不同语言的 AST,以帮助创建自定义规则。对于 JSON 和 Markdown,用户将获得可扩展的 AST 视图,而 JavaScript 则可以查看 AST、作用域和代码路径信息。未来,团队将继续更新代码探索器,添加新语言和功能,以帮助用户创建自定义规则。
最重要的是,代码探索器是开源的,欢迎大家共同参与改进。
编写自己的语言插件
ESLint 的语言设计使其能够通过新的 languages 键包含在任何插件中。@eslint/json
和 @eslint/markdown
插件不仅提供 JSON 和 Markdown 的代码检查功能,同时也作为创建自定义语言的示例。用户可以查看语言文档,以了解如何创建自己的语言插件。
结论
支持 JavaScript 以外的语言代码检查一直是 ESLint 的发展路线图中的一部分,因此能够实现这一里程碑令人振奋。团队的长期目标是确保 ESLint 能够检查 Web 项目中使用的任何类型文件,无论是通过官方支持的语言插件还是社区编写的插件。目前,JavaScript、JSON 和 Markdown 的支持使得这一目标更加接近。
最后,ESLint 是一个独立的开源项目,由一群志愿者在业余时间维护。如果您喜欢使用 ESLint,请与您的公司讨论赞助该项目的可能性。
转载自:https://juejin.cn/post/7423398325195669513