自定义 ESLint 插件是扩展 ESLint 功能的一种方式,可以用来添加新的规则、配置或解析器。大多数插件都是以扩展规则为主,因此这些插件通常包含大量的自定义规则。
规则结构
一个典型的 ESLint 规则文件会导出一个对象,该对象包含 meta
和 create
两个字段:
module.exports = {
meta: {
// 元数据信息
},
create: function(context) {
return {
// 规则的具体实现
};
}
};
-
meta 字段
- type:描述规则的类型。
"problem"
:表示规则识别的是可能导致错误的代码问题。"suggestion"
:表示规则识别的是可能的改进,以使代码更易于阅读和/或更具可维护性。"layout"
:表示规则识别的是布局问题,即风格指南中的问题,而不会影响代码的功能。
- docs:提供关于规则的文档信息。
- description:规则的简短描述。
- recommended:布尔值,表示规则是否在推荐配置中启用。
- url:指向规则文档的 URL。
- fixable:说明是否可以自动修复由此规则识别的问题。如果可以自动修复,此字段应为
"code"
或"whitespace"
,否则应为null
或省略。 - deprecated:布尔值,表示规则是否已被弃用。默认为
false
。
- type:描述规则的类型。
-
create 字段
- 这个字段对应的是一个函数,该函数返回一个对象,对象里面包含处理不同 AST 节点的方法。
- 每个方法接收一个参数,该参数是当前遍历到的 AST 节点对象。
context
参数提供了多个有用的方法:- context.report(descriptor):报告一个问题。
- context.getSourceCode():返回一个
SourceCode
对象,用于访问源代码的文本和 AST。 - context.getAncestors():返回一个包含当前节点的所有祖先节点的数组。
- context.getScope():返回一个代表当前作用域的
Scope
对象。
实战案例
接下来,我们通过一个具体的示例来创建一个简单的 ESLint 插件。
创建项目
首先,我们需要创建一个新的项目 eslint-plugin-customrules
并进行初始化:
mkdir eslint-plugin-customrules
cd eslint-plugin-customrules
pnpm init -y
然后,在项目根目录下创建 rules
目录,用于存放自定义规则。
编写规则
在 rules
目录下创建两个规则文件:
- no-alert.js
// 不允许有 alert 语句