菜单

错误预防规则

相关源文件

目的与范围

本文档提供了 Airbnb JavaScript 风格指南中错误预防规则的全面概述。这些规则专门设计用于在常见的编程错误和潜在的 bug 进入生产代码之前捕获和预防它们。有关其他规则类别的信息,请参阅最佳实践规则ES6 规则变量和严格模式规则

来源:packages/eslint-config-airbnb-base/rules/errors.js1-189

错误预防规则概述

错误预防规则是 Airbnb JavaScript 风格指南的 Linting 系统的一个关键组成部分。这些规则专注于检测和预防常见的 JavaScript 错误,帮助开发者编写更可靠的代码。几乎所有的错误预防规则都设置为 error 严重性级别,这表明它们在维护代码质量方面至关重要。

这些规则作为 eslint-config-airbnb-base 的一部分实现,主要在 errors.js 文件中定义。

错误预防规则组织

来源:packages/eslint-config-airbnb-base/rules/errors.js1-189

规则类别

语法和逻辑错误

这些规则用于捕获代码中的潜在语法问题和逻辑错误

规则目的严重性
for-direction强制执行“for”循环的更新子句以正确的方向移动error
no-cond-assign防止在条件表达式中意外赋值error
no-constant-condition防止在条件中使用常量表达式warn
no-dupe-args防止在函数声明中使用重复的参数error
no-dupe-else-if防止在 if-else-if 链中使用重复的条件error
no-dupe-keys防止在对象字面量中使用重复的键error
no-duplicate-case防止在 switch 语句中使用重复的 case 标签error
no-empty防止出现没有注释的空块error
no-extra-semi防止出现不必要的分号error
no-func-assign防止覆盖以函数声明形式声明的函数error
no-import-assign防止为导入的绑定赋值error
no-inner-declarations防止在嵌套块中使用函数/变量声明error
no-unreachable防止 return、throw、continue 或 break 语句之后的代码不可达error
no-unreachable-loop防止循环体只允许一次迭代error

来源:packages/eslint-config-airbnb-base/rules/errors.js3-146

正则表达式错误

这些规则侧重于预防正则表达式模式中的错误

规则目的严重性
no-control-regex防止在正则表达式中使用控制字符error
no-empty-character-class防止在正则表达式中使用空字符类error
no-invalid-regexp防止使用无效的正则表达式字符串error
no-regex-spaces防止在正则表达式字面量中使用多个空格error
no-misleading-character-class防止在字符类语法中使用由多个代码点组成的字符error
no-useless-backreference防止在正则表达式中使用无用的反向引用error

来源:packages/eslint-config-airbnb-base/rules/errors.js37-167

异步和 Promise 错误

这些规则用于捕获处理异步代码时的常见错误

规则目的严重性
no-async-promise-executor防止将 async 函数用作 Promise 执行器error
no-await-in-loop防止在循环中使用 await(可能导致性能问题)error
no-promise-executor-return防止从 Promise 执行器函数返回值error
require-atomic-updates防止由于 await/yield 引起的竞争条件(由于 bug 已禁用)off

来源:packages/eslint-config-airbnb-base/rules/errors.js11-176

这些规则有助于预防与 JavaScript 类型系统相关的错误

规则目的严重性
no-compare-neg-zero防止与负零进行比较error
no-loss-of-precision防止数字字面量丢失精度error
no-obj-calls防止将全局对象的属性用作函数error
use-isnan强制在检查 NaN 时使用 isNaN()error
valid-typeof确保 typeof 结果与有效字符串进行比较error

来源:packages/eslint-config-airbnb-base/rules/errors.js19-187

其他错误预防规则

这些规则解决了各种其他潜在的错误来源

规则目的严重性
getter-return强制属性 getter 中使用 return 语句error
no-console警告控制台用法(通常在生产中移除)warn
no-debugger防止 debugger 语句error
no-ex-assign防止在 catch 块中重新分配异常error
no-extra-boolean-cast防止不必要的布尔值转换error
no-prototype-builtins防止直接使用 Object.prototype 方法error
no-sparse-arrays防止数组出现缺失的元素error
no-template-curly-in-string防止在普通字符串中使用模板字面量语法error
no-unsafe-finally防止在 finally 块中使用控制流语句error
no-unsafe-negation防止对关系运算符的左操作数进行否定error
no-unsafe-optional-chaining防止可选链与潜在的 undefined 值一起使用error
no-setter-return防止 setter 中返回值error

来源:packages/eslint-config-airbnb-base/rules/errors.js7-160

严重性分布

大多数错误预防规则都设置为 error 严重性,这意味着违反这些规则将导致 Linting 过程失败。这种严格性凸显了预防潜在 bug 的重要性。

来源:packages/eslint-config-airbnb-base/rules/errors.js1-189

实施和配置

错误预防规则在 eslint-config-airbnb-base 包内的 errors.js 文件中进行配置。此配置是核心 ESLint 规则集的一部分,在使用 eslint-config-airbnb-base 或完整的 eslint-config-airbnb 包时都会自动包含。

来源:packages/eslint-config-airbnb-base/rules/errors.js1-2

显著特点

默认关闭的规则

一些错误预防规则默认关闭,但可能会在未来版本中考虑

  1. no-constant-binary-expression - 防止不影响值的操作
  2. no-new-native-nonconstructor - 防止使用 new 关键字与全局非构造函数一起使用
  3. no-unused-private-class-members - 防止使用未使用的私有类成员

这些规则标记有“TODO”注释,表明它们正在被考虑用于未来采用。

来源:packages/eslint-config-airbnb-base/rules/errors.js30-163

具有特殊配置的规则

几条规则具有超出简单开启/关闭设置的特定配置

  1. getter-return - 允许使用 { allowImplicit: true } 进行隐式返回
  2. no-cond-assign - 设置为 always 模式以捕获条件中的所有赋值
  3. no-unreachable-loop - 配置为检查所有循环类型
  4. no-unsafe-optional-chaining - 配置为 { disallowArithmeticOperators: true }
  5. valid-typeof - 设置为 { requireStringLiterals: true } 以强制进行严格比较

这些特殊的配置展示了 Airbnb 彻底预防错误的策略。

来源:packages/eslint-config-airbnb-base/rules/errors.js9-187

结论

错误预防规则是 Airbnb JavaScript 风格指南的关键组成部分,旨在在许多常见的编程错误导致生产问题之前捕获它们。通过 ESLint 强制执行这些规则,项目可以维护更高的代码质量,并减少与语法、类型、正则表达式和异步代码相关的 bug。有关集成说明,请参阅安装和设置