ESLint 推陈出新,支持 JSON 和 Markdown 只是变革的开始

00. 写在前面

大家好,我是大家的林语冰。

今年七月,ESLint 团队就爆料了 ESLint 的未来计划,想要将 ESLint 打造为一个更通用的 Linter(代码质保工具),能够对任何语言进行 lint 分析。

ESLint 中的查找文件、解析、报告问题等一大坨核心功能都比较通用,因此在过去的几个月里,ESLint 一直致力于从核心源码中提取 JS 专属的部分。

今天,这项工作已经码到功成,ESLint 现在可以同时对 JSON 和 Markdown 进行 lint(代码质保),不再局限于 JS 和 TSX 等文件。

免责声明

本文乃 AI 翻译 + 真人删改,仅供粉丝参考。英文原味版请传送 ESLint now officially supports linting of JSON and Markdown

01. 使用 @eslint/json 对 JSON 进行 lint

JSON 使用 @eslint/json 插件来 lint,该插件是官方支持的语言插件,提供了 JSON、JSONC(允许注释的 JSON)和 JSON5 的解析。

要使用该插件,请从 npm 安装它:

bash 复制代码
npm install @eslint/json -D

然后更新你的配置文件:

js 复制代码
import json from '@eslint/json'

export default [
  {
    plugins: {
      json,
    },
  },
  // JSON 代码质保
  {
    files: ['**/*.json'],
    language: 'json/json',
    rules: {
      'json/no-duplicate-keys': 'error',
    },
  },
]

该插件内置了若干规则,关于配置 JSON lint 的更多技术细节,请查看结尾分享的官方仓库链接。

02. 使用 @eslint/markdown 对 Markdown 进行 lint

Markdown 使用 @eslint/markdown 插件来 lint,该插件是只包含处理器的 eslint-plugin-markdown 的下一代插件。

这个官方支持的新语言插件具有 CommonMark 和 GitHub 风格的 Markdown 的解析和规则。

要使用该插件,请从 npm 安装它:

bash 复制代码
npm install @eslint/markdown -D

然后更新你的配置文件:

js 复制代码
// eslint.config.js
import markdown from '@eslint/markdown'

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

与 JSON 插件类似,这个插件也内置了若干规则,关于配置 Markdown lint 的更多技术细节,请查看结尾分享的官方仓库链接。

03. 创建自定义规则和使用 Code Explorer

@eslint/json@eslint/markdown 都将源码解析为 AST(抽象语法树),然后遍历 AST 来运行规则,这跟 ESLint 对 JS 的处理殊途同归。

这意味着,你可以为 JSON 和 Markdown 编写自定义规则,就像为 JS 编写自定义规则一样。

主要区别在于 AST 格式。JSON 使用 Momoa AST,而 Markdown 使用 mdast。

由于 ESLint 社区没有丰富资源可以辅助你浏览其他 AST 格式,因此 ESLint 团队推出了 Code Explorer(代码浏览器)。

Code Explorer 允许你浏览不同语言的 AST,可以辅助你创建自定义规则。

对于 JSON 和 Markdown,你将获得 AST 的扩展视图,而对于 JS,你不仅可以浏览 AST,还可以浏览 ESLint 在解析代码时生成的作用域和代码路径信息。

今后,ESLint 团队将继续更新 Code Explorer 的新语言和功能,辅助你创建自定义规则。

04. 编写您自己的语言插件

ESLint 语言的设计方式是,它们可以使用新的 languages 键包含在任何插件中。

@eslint/json@eslint/markdown 插件不仅分别支持 JSON 和 Markdown,还作为如何自定义语言插件的示例。你可以查看语言文档,了解如何创建自己的语言。

高潮总结

在 ESLint 发展路线上,JS 之外的其他语言需求已经由来已久,因此 ESLint 支持 JSON 和 Markdown 是一个巨大的里程碑。

我们的长期目标是确保 ESLint 可以检查你可能在 Web 项目中使用的任何类型的文件,无论是使用官方支持的语言插件,还是使用社区编写的插件。

借助 JS、JSON 和 Markdown,我们已经在实现该目标的道路上勇往直前。

参考文献

  1. ESLint Blogeslint.org/blog/2024/1...
  2. ESLint JSON GitHubgithub.com/eslint/json
  3. ESLint Markdown GitHubgithub.com/eslint/mark...

粉丝互动

本期话题是:如何看待新版 ESLint 支持 JSON + Markdown?你可以在本文下方自由言论,或者转发分享。

欢迎持续关注我,深度学习更多前端进阶的技术细节。谢谢大家的点赞和分享,我们下期再见~

相关推荐
greenbbLV2 分钟前
中小公司积分商城选型:SaaS与私有化方案对比解析
大数据·前端·小程序
看昭奚恤哭33 分钟前
Flutter 布局核心思想
开发语言·javascript·flutter
朝阳5811 小时前
Cesium `Camera.flyTo`:“飞过去“
javascript
NutShell Wang1 小时前
Vite 8.1 深度拆解:Rolldown 统一打包器如何终结前端构建的「双引擎时代」
前端·rust·开源·vite·开发者工具·vibe coding
朱容zr3331331 小时前
请解释“回表”的概念。
java·前端·数据库
leslie1182 小时前
webpack笔记
前端·webpack
宁风NF2 小时前
JavaScript:内存、垃圾回收、性能优化
开发语言·前端·javascript·学习·性能优化·es6
勾勾圈圈蛋蛋2 小时前
DOM、BOM、DOM操作详解 + 结合Vue响应式关联梳理
前端
打妖妖灵滴哪吒2 小时前
IOS模态窗口的作用与设计原则
前端·ui
午安~婉3 小时前
挑战二:博客预览卡片
前端·javascript·html