ESLint Rules
XXHolic opened this issue · comments
目录
引子
ESLint 里面的规则很多,针对 eslint:recommended
的配置进行集中了解。
简介
ESLint 是一个用于识别和报告在 ECMAScript / JavaScript 代码中发现的模式的工具,它的目的是让代码更加一致并避免 bug。在许多方面上与 JSLint 类似,但有一些不同之处:
- ESLint 使用 Espree 解析 JavaScript。
- ESLint 使用 AST 来评估代码中的模式。
- ESLint 完全可插拔,每一个规则都是一个插件,你可以在运行时添加更多。
默认所有的规则都是不开启,使用 eslint --init
命令创建的配置文件,会有 "extends": "eslint:recommended"
的属性配置,下面就来看下对应这个设置的具体规则。
Rules
以下出现的规则是按照高版本到低版本排序
可能的错误
以下规则可能涉及到 JavaScript 代码的语法和逻辑错误。
规则 | 作用 |
---|---|
no-async-promise-executor | 禁止使用 async 函数作为 Promise 的执行体 |
no-misleading-character-class | 禁止在字符类语法中出现由多个代码点组成的字符 |
require-atomic-updates | 禁止由于 await 或 yield 的使用而可能导致出现竞态条件的赋值 |
getter-return | 强制 getter 返回值 |
for-direction | 强制 for 循环计数器合理更新,避免死循环 |
no-compare-neg-zero | 禁止比较 -0 |
no-unsafe-negation | 禁止对关系运算符的左操作数使用否定操作符 |
no-prototype-builtins | 禁止直接调用 Object.prototype 的方法 |
no-unsafe-finally | 禁止在 finally 块中出现控制流的语句 |
no-unexpected-multiline | 禁止出现让人困惑的多行表达式 |
no-empty-character-class | 禁止正则内空字符串集 |
no-dupe-args | 禁止在 function 定义中使用重复参数 |
no-irregular-whitespace | 禁止不规则空白 |
no-inner-declarations | 禁止在嵌套的块中声明 var 和 function |
no-constant-condition | 禁止在条件中使用常量表达式 |
no-extra-boolean-cast | 禁止不必要的布尔类型转换 |
no-invalid-regexp | 禁止在正则构造函数中使用非法字符 |
no-control-regex | 禁止在正则中使用控制字符 |
no-cond-assign | 禁止在条件语句中使用赋值运算符 |
no-dupe-keys | 禁止对象键重复 |
no-ex-assign | 禁止在 catch 中重新分配异常 |
no-extra-semi | 禁止出现不必要的分号 |
no-func-assign | 禁止重分配函数声明 |
no-obj-calls | 禁止将全局对象属性作为函数调用 |
no-unreachable | 禁止在 return , throw , continue , break 声明之后有不能抵达的代码 |
valid-typeof | 强制使用 typeof 表达式跟有效的字符串比较 |
use-isnan | 要求使用 isNaN() 检查 NaN |
no-regex-spaces | 禁止正则表达式中出现多个空格 |
no-sparse-arrays | 禁止使用 [,'Tom',] 这类数组 |
no-debugger | 禁止使用 debugger |
no-empty | 禁止空的块声明 |
最佳实践
规则 | 作用 |
---|---|
no-useless-catch | 禁止非必要的 catch |
no-global-assign | 禁止对原生对象或者只读全局变量赋值 |
no-useless-escape | 禁用不必要的转义字符 |
no-self-assign | 禁止自我赋值 |
no-unused-labels | 禁止出现未使用的标签 |
no-case-declarations | 禁止在 case 语句中直接使用词法声明 |
no-empty-pattern | 禁止使用空的解构模式 |
no-redeclare | 禁止变量重复声明 |
no-fallthrough | 禁止 case 语句下通 |
no-octal | 禁止使用八进制字面量 |
no-with | 禁止使用 with 语句 |
变量
规则 | 作用 |
---|---|
no-shadow-restricted-names | 禁止将标识符定义为受限的名字 |
no-delete-var | 禁止删除变量 |
no-undef | 禁用使用未声明的变量,除非在 /* global */ 注释中被提到 |
no-unused-vars | 禁用出现未使用的变量 |
格式问题
规则 | 作用 |
---|---|
no-mixed-spaces-and-tabs | 禁用缩进中空格和 Tab 混合 |
ES 6
规则 | 作用 |
---|---|
no-new-symbol | 禁止对 Symbol 对象使用 new 操作符 |
no-dupe-class-members | 禁止声明重复的类成员 |
no-class-assign | 禁止修改类声明的变量 |
no-const-assign | 禁止修改 const 声明的变量 |
require-yield | 要求 generator 函数内有 yield |
constructor-super | 要求在构造函数中调用 super() |
no-this-before-super | 禁止在构造函数中,在调用 super() 之前使用 this 或 super |
弃用规则
平衡提升工具和改变可能带来的挫败感是一个艰难的任务。影响我们用户的一个关键方面就是弃用规则。
ESLint 团队尽可能小心的进行提交升级。到最后,团队同意在将来按照下面的方针弃用规则。这些方针的目的是在没有破坏现有配置前提下,允许进行改进和修改。
- 规则将永远不会从 ESLint 中移除。
- 规则将会按照需要弃用,且在所有文档中标记。
- 在一个规则被弃用后,团队将不会处理任何相关的工作,这将包含修复 bug、增强功能和更新规则的文档。跟弃用规则相关的提问和提交将不会被接受,并且将关闭。
因为弃用的规则将永远不会被移除,如果那些规则对你适用,你可以一直使用它们。然而,请记住这些弃用的规则将不会被维护。
我们希望通过遵循这些方针,可以继续工作和提升,让 ESLint 变成能够成为的最好的工具,同时在这个过程中尽可能减少对我们用户的干扰。