规则参照表

可以在 官方文档 中看到 ESLint 里面的所有规则

在官方的规则参照表中,每一条规则后面有三个符号,对应的含义如下:

  • ✅:在配置文件中的 "extends": "eslint:recommended" 属性会启用此规则。
  • 🔧:此规则报告的一些问题可以通过 --fix 参数自动修复。
  • 💡:此规则报告的一些问题可以通过编辑器建议手动修复。

规则的重要性

在 ESLint 中,本身可以配置规则的重要性,总共分为三个级别:

  • off0:关闭这条规则
  • warn1:这条规则的级别为警告级别
  • error2:这条规则的级别为错误级别

例如:

{
  "rules": {
    "no-undef": "error",
    "semi": ["warn", "always"]
  }
}

在上面的规则配置中,semi 对应的值为一个数组,数组的第一项是上面所说的规则重要性,第二项则是该条规则配置可选项,关于这个配置可选项,不同的规则能够填入的值是不一样的。具体能够填写的值,要去这条规则的说明页面去查阅。

比如这里的 semi 可配置值如下:

  • always:这是默认值,代表语句结束需要插入分号
  • never: 在没有 ASI 风险情况下,不需要插入分号

如果 semi 的值为 always,那么还可以配置一个额外的对象:

  • omitLastInOneLineBlock:配置为 true,表示禁止在单行代码块中的最后一个语句使用分号
  • omitLastInOneLineClassBody:配置为 true,表示禁止在单行类里面的最后一个语句使用分号

如果 semi 的值为 never,那么也是可以配置一个额外的 beforeStatementContinuationChars 对象:

  • any:默认值,如果一行以 [(/+- 开始,在没有引起 ASI 风险的前提下,语句开头的分号可加可不加
let a = 1
+1 // 正确:分号被忽略
 
let b = 2
;+2 // 正确:分号也可以
  • always:如果一行以 [(/+- 开始,则要求在语句开头使用分号
let a = 1
+1 // 错误:要求在语句末尾使用分号
 
let b = 2
;+2 // 正确:添加了分号
  • never:如果一行以 [(/+- 开始,只要没有引起 ASI 风险,禁止在语句开头使用分号
let a = 1
+1 // 正确:没有 ASI 风险,不需要分号
 
let b = 2
;+2 // 错误:不允许在没有 ASI 风险的情况下使用分号

规则注释

在具体的代码文件里面,可以以注释的方式来配置规则,规则注释的优先级会高于配置文件里面的规则。

/* eslint eqeqeq: "off", curly: "error" */
/* eslint eqeqeq: 0, curly: 2 */
/* eslint quotes: ["error", "double"], curly: 2 */

一般在如下的场景中可能会涉及到使用注释规则:

  1. 针对特定的文件或者代码片段需要指定特殊规则,比如我们针对某一个代码片段去禁用 ESLint 检查
/* eslint-disable */
console.log('Hello')
/* eslint-enable */

或者只禁用某一个规则:

/* eslint-disable semi */
console.log("Hello");
/* eslint-enable semi */
  1. 指定某个文件的特殊配置,有时我们需要针对某个文件指定和其他文件不同的 ESLint 配置,这种情况下也可以使用注释的形式,这样就不需要去修改主要的配置文件
/* eslint-env node, mocha */

在上面的注释汇总,我们声明 ESLint 的检查环境为 node 和 mocha,这就意味着在检查该文件的时候,ESLint 会预设一些 node 和 mocha 中的全局变量,比如 processdescribeit

  1. 临时禁用某条规则
// eslint-disable-next-line no-unused-vars
const tempVariable = 'Temporarily not used';

在上面的注释中,我们使用了 eslint-disable-next-line,代表只禁用下一行的代码检查,后面跟上了具体的规则,表示禁用下一行代码的某一条规则的检查,不影响之后的代码。

另外在配置文件中,有如下的配置选项:

  • noInlineConfig:禁止行内注释形式的规则
  • reportUnusedDisableDirectives:用于是否报告有未使用的 eslint-disable 指令

例如:

/* eslint-disable-next-line no-console */
// console.log('Hello');

eslint-disable-next-line no-console 这一条行内注释规则是一条无用的注释规则

更多关于行内注释规则,可以参阅 官网资料