内置规则
eslint 内置规则介绍
modules.exports = {
// 所有规则页面(https://eslint.org/docs/rules)标记为 ✔ 的规则将会默认开启
extends: ['eslint:recommended'],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
/* Rules *代表recommended也就是'error', ()包裹代表可--fix自动修复, options代表有其它选项建议去官网查看用法, 还有这个规则适合什么时候使用的介绍 */
rules: {
/* Possible Problems: These rules relate to possible logic errors in code */
// options Array回调函数需要return https://eslint.org/docs/rules/array-callback-return
'array-callback-return': [
'off',
{ allowImplicit: false, checkForEach: false },
],
// * 派生类的Constructor中调用super()
'constructor-super': 'error',
// * for循环方向错误导致终止条件无法到达
'for-direction': 'error',
// *options getter函数需要return https://eslint.org/docs/rules/getter-return
'getter-return': ['error', { allowImplicit: false }],
// * 禁止使用async函数作为new Promise()的参数
'no-async-promise-executor': 'error',
// 禁止for循环中使用await
'no-await-in-loop': 'off',
// * 禁止修改class声明的变量
'no-class-assign': 'error',
// * 禁止与-0比较
'no-compare-neg-zero': 'error',
// *options 禁止测试条件中出现赋值操作符 https://eslint.org/docs/rules/no-cond-assign
'no-cond-assign': ['error', 'except-parens'],
// * 禁止修改const声明的变量
'no-const-assign': 'error',
// *options 禁止常量表达式作为测试条件 https://eslint.org/docs/rules/no-constant-condition
'no-constant-condition': ['error', { checkLoops: true }],
// 禁止在constructor中return一个值
'no-constructor-return': 'off',
// * 禁止在正则表达式中使用控制字符(ASCII:0~31)
'no-control-regex': 'error',
// * 禁止使用debugger
'no-debugger': 'error',
// * 禁止函数定义中出现重复的参数
'no-dupe-args': 'error',
// * 禁止class中定义重复的成员
'no-dupe-class-members': 'error',
// * 禁止else if中使用重复的条件
'no-dupe-else-if': 'error',
// * 禁止对象字面量中使用重复的key
'no-dupe-keys': 'error',
// * 禁止switch出现重复的case
'no-duplicate-case': 'error',
// options 禁止重复import模块 https://eslint.org/docs/rules/no-duplicate-imports
'no-duplicate-imports': ['off', { includeExports: false }],
// * 禁止在正则表达式中使用空字符集
'no-empty-character-class': 'error',
// * 禁止空的结构模式
'no-empty-pattern': 'error',
// * 禁止catch语句中修改exception参数
'no-ex-assign': 'error',
// *options 禁止case语句落空 https://eslint.org/docs/rules/no-fallthrough
'no-fallthrough': ['error', { commentPattern: 'falls?\\s?through' }],
// * 禁止对函数声明重新赋值
'no-func-assign': 'error',
// * 禁止直接赋值import导入的变量
'no-import-assign': 'error',
// *options 禁止在嵌套的块作用域中使用var或函数声明 https://eslint.org/docs/rules/no-inner-declarations
'no-inner-declarations': ['error', 'functions'],
// *options 禁止在 RegExp 构造函数中使用无效的正则表达式字符串 https://eslint.org/docs/rules/no-invalid-regexp
'no-invalid-regexp': ['error', { allowConstructorFlags: [] }],
// *options 禁止不规则的空白(可以配置字符串,模板字符串,注释,正则表达式字面量) https://eslint.org/docs/rules/no-irregular-whitespace
'no-irregular-whitespace': ['error', { skipStrings: true }],
// * 禁止使用超出浮点数精度的数字字面量
'no-loss-of-precision': 'error',
// * 禁止正则表达式中使用多代码点组成的一个字符
'no-misleading-character-class': 'error',
// * 禁止Symbol构造函数(本来也不支持)
'no-new-symbol': 'error',
// * 禁止某些全局对象被当作函数或构造函数调用(Math,Date,Reflect,Atomics)
'no-obj-calls': 'error',
// 禁止从new Promise()的函数参数中return一个值
'no-promise-executor-return': 'off',
// * 禁止直接在对象实例上调用某些 Object.prototype 方法(call,apply可以)
'no-prototype-builtins': 'error',
// *options 禁止自身赋值 https://eslint.org/docs/rules/no-self-assign
'no-self-assign': ['error', { props: true }],
// 禁止自身比较
'no-self-compare': 'off',
// * 禁止setter函数return一个值
'no-setter-return': 'error',
// * 禁止稀疏数组
'no-sparse-arrays': 'error',
// 禁止在常规字符串中出现模板字面量占位符语法
'no-template-curly-in-string': 'off',
// * 禁止在派生类构造函数中在super()调用之前使用this/super
'no-this-before-super': 'error',
// *options 禁止使用未声明变量 https://eslint.org/docs/rules/no-undef
'no-undef': ['error', { typeof: false }],
// * 禁止令人困惑的多行表达式
'no-unexpected-multiline': 'error',
// 禁止一成不变的循环条件
'no-unmodified-loop-condition': 'off',
// * 禁止return, throw, break, continue之后出现的无法执行的语句及子类构造函数没有调用super()
'no-unreachable': 'error',
// options 禁止最多只有一次的循环 https://eslint.org/docs/rules/no-unreachable-loop
'no-unreachable-loop': ['off', { ignore: [] }],
// * 禁止finally块中直接使用return, throw, break, continue
'no-unsafe-finally': 'error',
// *options 禁止对关系运算符的左操作数使用否定操作符 https://eslint.org/docs/rules/no-unsafe-negation
'no-unsafe-negation': ['error', { enforceForOrderingRelations: false }],
// *options 禁止在不允许使用undefined的上下文中使用可选链(?.) https://eslint.org/docs/rules/no-unsafe-options-chaining
'no-unsafe-optional-chaining': [
'error',
{ disallowArithmeticOperators: false },
],
// 禁止未使用的私有类成员对象
'no-unused-private-class-members': 'off',
// *options 禁止出现未使用的变量 https://eslint.org/docs/rules/no-unused-vars
'no-unused-vars': [
'error',
{
vars: 'all',
args: 'after-used',
caughtErrors: 'none',
ignoreRestSiblings: false,
},
],
// options 禁止未声明就使用 https://eslint.org/docs/rules/no-use-before-define
'no-use-before-define': [
'off',
{ classes: true, functions: true, variables: true },
],
// * 禁止在正则表达式中使用无用的反向引用
'no-useless-backreference': 'error',
// options 禁止由于 await 或 yield的使用而可能导致出现竞态条件的赋值 https://eslint.org/docs/rules/require-atomic-updates
'require-atomic-updates': ['off', { allowProperties: false }],
// *options 使用isNaN()检查NaN https://eslint.org/docs/rules/use-isnan
'use-isnan': [
'error',
{ enforceForSwitchCase: true, enforceForIndexOf: false },
],
// *options 强制typeof表达式与有效的字符串字面量比较 https://eslint.org/docs/rules/valid-typeof
'valid-typeof': ['error', { requireStringLiterals: true }],
/* Suggestions: These rules suggest alternate ways of doing things */
// options 强制getter和setter成对出现在Object和Class中(默认可以只有getter) https://eslint.org/docs/rules/accessor-pairs
'accessor-pairs': [
'off',
{
setWithoutGet: true,
getWithoutSet: false,
enforceForClassMembers: true,
},
],
// (options) 需要在箭头函数体中使用大括号(只有as-needed才可以使用第三个参数)
'arrow-body-style': [
'off',
'as-needed',
{ requireReturnForObjectLiteral: false },
],
// 模拟var像let一样拥有块作用域
'block-scoped-var': 'off',
// options 使用驼峰命名 https://eslint.org/docs/rules/camelcase
camelcase: [
'off',
{
properties: 'always',
ignoreDestructuring: false,
ignoreImports: false,
ignoreGlobals: false,
allow: [],
},
],
// (options) 强制或禁止对注释的第一个字母大写(可以使用block,line单独配置单行多行注释) https://eslint.org/docs/rules/capitalized-comments
'capitalized-comments': [
'off',
'always',
{
ignorePattern: 'jscs|jshint|eslint|istanbul|global|globals|exported',
ignoreInlineComments: false,
ignoreConsecutiveComments: false,
},
],
// options 强制类中的方法使用this, 否则需要将不使用this的实例方法改为静态方法 https://eslint.org/docs/rules/class-methods-use-this
'class-methods-use-this': [
'off',
{ enforceForClassFields: true, exceptMethods: [] },
],
// options 限制程序中允许的最大环路复杂度(为了降低程序复杂度) https://eslint.org/docs/rules/complexity
complexity: ['off', { max: 20 }],
// options 要求return语句要么总是返回值要么不返回 https://eslint.org/docs/rules/consistent-return
'consistent-return': ['off', { treatUndefinedAsUnspecified: false }],
// options 要求使用统一的this别名 https://eslint.org/docs/rules/consistent-this
'consistent-this': ['off', 'that'],
// (options) 单行语句是否使用花括号 https://eslint.org/docs/rules/curly
curly: ['off', 'multi'],
// options switch语句是否需要default https://eslint.org/docs/rules/default-case
'default-case': ['off', { commentPattern: '^no\\sdefault' }],
// 强制default子句在switch语句的最后
'default-case-last': 'off',
// 强制默认值参数在函数参数列表的最后
'default-param-last': 'off',
// (options) 尽可能使用点符号 https://eslint.org/docs/rules/dot-notation
'dot-notation': ['off', { allowKeywords: true, allowPattern: '' }],
// (options) 尽可能使用===和!==(always可以配置第2个参数, smart不需要) https://eslint.org/docs/rules/eqeqeq
eqeqeq: ['off', 'always', { null: 'always' }],
// options 需要函数名与赋值的变量名或属性名一致 https://eslint.org/docs/rules/func-name-matching
'func-name-matching': [
'off',
'always',
{
considerPropertyDescriptor: false,
includeCommonJSModuleExports: false,
},
],
// options 要求或禁止带名称的函数表达式 https://eslint.org/docs/rules/func-names
'func-names': ['off', 'always', { generators: 'always' }],
// options 强制一致的使用函数声明或函数表达式形式(当第2个参数为declaration,第3个参数才会生效) https://eslint.org/docs/rules/func-style
'func-style': ['off', 'expression', { allowArrowFunctions: false }],
// options 假如对象字面量或类中存在getter,setter函数, 强制getter和setter相邻 https://eslint.org/docs/rules/grouped-accessor-pairs
'grouped-accessor-pairs': ['off', 'anyOrder'],
// 需要过滤for-in循环可能继承自原型链的属性(Object.prototype.hasOwnProperty)
'guard-for-in': 'off',
// options 禁止使用指定的标识符作为变量名, 函数名, 对象属性, 类成员对象(第1个参数之后全部是禁用的标识符) https://eslint.org/docs/rules/id-denylist
'id-denylist': ['off'],
// options 强制标识符的最小和最大长度 https://eslint.org/docs/rules/id-length
'id-length': [
'off',
{
min: 2,
max: Infinity,
properties: 'always',
exceptions: [],
exceptionPatterns: [],
},
],
// options 需要标识符满足特定的正则表达式(第2个参数是正则表达式字符串) https://eslint.org/docs/rules/id-match
'id-match': [
'off',
'',
{
properties: false,
classFields: false,
onlyDeclarations: false,
ignoreDestructuring: false,
},
],
// options 需要或禁止在变量声明时初始化(第2个参数为never时, 第3个参数生效) https://eslint.org/docs/rules/init-declarations
'init-declarations': ['off', 'always', { ignoreForLoopInit: true }],
// options 限制每个文件class的最大数量 https://eslint.org/docs/rules/max-classes-per-file
'max-classes-per-file': ['off', { max: 1, ignoreExpressions: false }],
// options 限制循环嵌套的最大深度 https://eslint.org/docs/rules/max-depth
'max-depth': ['off', { max: 4 }],
// options 限制每个文件的最大行数 https://eslint.org/docs/rules/max-lines
'max-lines': [
'off',
{ max: 300, skipBlankLines: false, skipComments: false },
],
// options 限制每个函数的最大行数 https://eslint.org/docs/rules/max-lines-per-function
'max-lines-per-function': [
'off',
{ max: 50, skipBlankLines: false, skipComments: false, IIFEs: false },
],
// options 限制可以嵌套的最大深度的回调函数 https://eslint.org/docs/rules/max-nested-callbacks
'max-nested-callbacks': ['off', { max: 10 }],
// options 限制函数定义的参数的最大数量 https://eslint.org/docs/rules/max-params
'max-params': ['off', { max: 3 }],
// options 限制函数体中语句的最大数量 https://eslint.org/docs/rules/max-statements
'max-statements': ['off', { max: 10 }, { ignoreTopLevelFunctions: false }],
// (options) 强制多行注释采用特定的格式 https://eslint.org/docs/rules/multiline-comment-style
'multiline-comment-style': ['off', 'starred-block'],
// options 要求构造函数名的首字母大写 https://eslint.org/docs/rules/new-cap
'new-cap': [
'off',
{
newIsCap: true,
capIsNew: true,
properties: true,
newIsCapExceptions: [],
newIsCapExceptionPattern: '',
capIsNewExceptions: [],
capIsNewExceptionPattern: '',
},
],
// 禁止alert弹出框类型的函数
'no-alert': 'off',
// 禁止使用Array构造函数
'no-array-constructor': 'off',
// options 禁止按位运算符 https://eslint.org/docs/rules/no-bitwise
'no-bitwise': ['off', { allow: [], int32Hint: false }],
// 禁止使用caller或callee(arguments.caller/arguments.callee)
'no-caller': 'off',
// * 禁止在case/default子句中使用词法声明(let,const,function and class)
'no-case-declarations': 'error',
// (options) 禁止在可能与比较运算符混淆的地方使用箭头函数 https://eslint.org/docs/rules/no-confusing-arrow
'no-confusing-arrow': ['off', { allowParens: true }],
// options 禁止使用console对象 https://eslint.org/docs/rules/no-console
'no-console': ['off', { allow: [] }],
// 禁用continue语句
'no-continue': 'off',
// * 禁止使用delete删除变量
'no-delete-var': 'error',
// () 禁止除法操作符显式的出现在正则表达式开始的位置
'no-div-regex': 'off',
// (options) 禁止if和else块中都return https://eslint.org/docs/rules/no-else-return
'no-else-return': ['off', { allowElseIf: true }],
// *options 禁止出现空语句块 https://eslint.org/docs/rules/no-empty
'no-empty': ['error', { allowEmptyCatch: false }],
// options 禁止出现空函数 https://eslint.org/docs/rules/no-empty-function
'no-empty-function': ['off', { allow: [] }],
// 禁止在没有类型检查操作符(==或!=)的情况下与 null 进行比较
'no-eq-null': 'off',
// options 禁止eval() https://eslint.org/docs/rules/no-eval
'no-eval': ['off', { allowIndirect: false }],
// options 禁止直接扩展内置的原生的对象 https://eslint.org/docs/rules/no-extend-native
'no-extend-native': ['off', { exceptions: [] }],
// () 禁止非必要的函数绑定bind()
'no-extra-bind': 'off',
// (*options) 禁止非必要的布尔转换 https://eslint.org/docs/rules/no-extra-boolean-cast
'no-extra-boolean-cast': ['error', { enforceForLogicalOperands: false }],
// () 禁止非必要的标签
'no-extra-label': 'off',
// (*) 禁止非必要的分号
'no-extra-semi': 'error',
// () 禁止小数点前后数字的缺失
'no-floating-decimal': 'off',
// *options 禁止修改内置原生对象或只读的全局变量 https://eslint.org/docs/rules/no-global-assign
'no-global-assign': ['error', { exceptions: [] }],
// (options) 禁止使用类型转换较短的符号模式,使用基本类型包装器 https://eslint.org/docs/rules/no-implicit-coercion
'no-implicit-coercion': [
'off',
{
boolean: true,
number: true,
string: true,
disallowTemplateShorthand: false,
allow: [],
},
],
// options 禁止在全局作用域中声明 https://eslint.org/docs/rules/no-implicit-globals
'no-implicit-globals': ['off', { lexicalBindings: false }],
// 禁止使用隐式eval(), setTimeout,setInterval第一个参数可以是字符串, 会被当做函数体执行
'no-implied-eval': 'off',
// options 禁止代码与注释在同一行 https://eslint.org/docs/rules/no-inline-comments
'no-inline-comments': ['off', { ignorePattern: '' }],
// options 限制类或类对象之外的this的使用 https://eslint.org/docs/rules/no-invalid-this
'no-invalid-this': ['off', { capIsConstructor: true }],
// 禁止使用__iterator__属性
'no-iterator': 'off',
// 禁止标签和变量拥有同样的名称
'no-label-var': 'off',
// options 禁止使用带标签的语句 https://eslint.org/docs/rules/no-labels
'no-labels': ['off', { allowLoop: false, allowSwitch: false }],
// 禁止不必要的嵌套块
'no-lone-blocks': 'off',
// () 禁止if子句作为else子句的唯一语句(应该使用else if)
'no-lonely-if': 'off',
// 禁止在循环语句中出现包含不安全引用的函数声明
'no-loop-func': 'off',
// options 禁止使用含义不明的数字(比如60可以代表分也可以代表秒) https://eslint.org/docs/rules/no-magic-numbers
'no-magic-numbers': [
'off',
{
ignore: [],
ignoreArrayIndexes: false,
ignoreDefaultValues: false,
enforceConst: false,
detectObjects: false,
},
],
// options 禁止混用不同的操作符(尽量用括号包裹一下) https://eslint.org/docs/rules/no-mixed-operators
'no-mixed-operators': ['off', { groups: [[]], allowSamePrecedence: true }],
// options 禁止链式赋值表达式 https://eslint.org/docs/rules/no-multi-assign
'no-multi-assign': ['off', { ignoreNonDeclaration: false }],
// 禁止使用\把单行字符串写成多行
'no-multi-str': 'off',
// 禁止在后面有else分支的if条件或三元表达式中使用否定条件
'no-negated-condition': 'off',
// 禁用new调用构造函数但不赋值给变量的操作
'no-new': 'off',
// 禁止直接使用Function构造函数
'no-new-func': 'off',
// 禁止直接使用Object构造函数
'no-new-object': 'off',
// 禁止new和基础包装类一起使用
'no-new-wrappers': 'off',
// * 禁止字符串字面量中使用\8,\9转义序列
'no-nonoctal-decimal-escape': 'error',
// * 禁止使用八进制字面量
'no-octal': 'error',
// 禁止字符串字面量中使用八进制转义序列
'no-octal-escape': 'off',
// options 禁止修改函数参数(当props为true时, 两个数组中值代表对象的属性可以修改) https://eslint.org/docs/rules/no-param-reassign
'no-param-reassign': [
'off',
{
props: false,
ignorePropertyModificationsFor: [],
ignorePropertyModificationsForRegex: [],
},
],
// options 禁止使用一元操作符++和-- https://eslint.org/docs/rules/no-plusplus
'no-plusplus': ['off', { allowForLoopAfterthoughts: false }],
// 禁止使用__proto__属性(Object,getPrototypeOf, Object.setPrototypeOf)
'no-proto': 'off',
// options 禁止在同一上下文中变量声明多次
'no-redeclare': ['off', { builtinGlobals: true }],
// (*) 禁止正则表达式字面量中出现多个连续空格
'no-regex-spaces': 'error',
// options 禁止使用export导出特定的名称(对export default无效) https://eslint.org/docs/rules/no-restricted-exports
'no-restricted-exports': ['off', { restrictedNamedExports: [] }],
// options 禁用特定的全局变量 https://eslint.org/docs/rules/no-restricted-globals
'no-restricted-globals': ['off', ''],
// options 禁止使用import或require导入特定的名称 https://eslint.org/docs/rules/no-restricted-imports
'no-restricted-imports': ['off', { paths: [], patterns: [] }],
// options 禁止使用某个对象的某个属性 https://eslint.org/docs/rules/no-restricted-properties
'no-restricted-properties': [
'off',
{ object: '', property: '', message: '' },
],
// options 禁止使用特定的语法 https://eslint.org/docs/rules/no-restricted-syntax
'no-restricted-syntax': ['off', { selector: '', message: '' }],
// options 禁止在return语句中赋值 https://eslint.org/docs/rules/no-return-assign
'no-return-assign': ['off', 'except-parens'],
// 禁用不必要的return await
'no-return-await': 'off',
// 禁止javascript: URL
'no-script-url': 'off',
// options 禁止使用逗号操作符 https://eslint.org/docs/rules/no-sequences
'no-sequences': ['off', { allowInParentheses: true }],
// options 禁止当前作用域声明的变量与父级作用域声明的变量名一致 https://eslint.org/docs/rules/no-shadow
'no-shadow': [
'off',
{ builtinGlobals: false, hoist: 'functions', allow: [] },
],
// * 禁止将标识符定义为受限的名称
'no-shadow-restricted-names': 'error',
// 禁止使用三元表达式
'no-ternary': 'off',
// 禁止throw基础类型字面量
'no-throw-literal': 'off',
// () 禁止使用undefined作为初始化值
'no-undef-init': 'off',
// 禁止使用undefined变量
'no-undefined': 'off',
// options 禁止在标识符前后使用_ https://eslint.org/docs/rules/no-underscore-dangle
'no-underscore-dangle': [
'off',
{
allow: [],
allowAfterThis: false,
allowAfterSuper: false,
allowAfterThisConstructor: false,
allowFunctionParams: true,
enforceInMethodNames: false,
},
],
// (options) 禁止不必要的三元表达式 https://eslint.org/docs/rules/no-unneeded-ternary
'no-unneeded-ternary': ['off', { defaultAssignment: true }],
// options 禁止对程序状态没有影响的无用表达式(比如 n+1 而不是 n += 1) https://eslint.org/docs/rules/no-unused-expressions
'no-unused-expressions': [
'off',
{
allowShortCircuit: false,
allowTernary: false,
allowTaggedTemplates: false,
enforceForJSX: false,
},
],
// (*) 禁止出现未使用的标签
'no-unused-labels': 'error',
// 禁止非必要的call,apply调用
'no-useless-call': 'off',
// * 禁止不必要的catch子句
'no-useless-catch': 'error',
// (options) 禁止对象或类中使用不必要的计算属性key(动态键) https://eslint.org/docs/rules/no-useless-computed-key
'no-useless-computed-key': ['off', { enforceForClassMembers: false }],
// 禁止不必要的字符串拼接
'no-useless-concat': 'off',
// 禁止出现不必要的构造函数(和隐藏构造函数一致就可以删除)
'no-useless-constructor': 'off',
// * 禁止不必要的转义字符
'no-useless-escape': 'error',
// (options) 禁止import, export, 和结构赋值中原名称与重命名一致 https://eslint.org/docs/rules/no-useless-rename
'no-useless-rename': [
'off',
{ ignoreImport: false, ignoreExport: false, ignoreDestructuring: false },
],
// () 禁止多余的return;
'no-useless-return': 'off',
// () 建议使用let和const, 禁止使用var
'no-var': 'off',
// options 禁止使用void操作符 https://eslint.org/docs/rules/no-void
'no-void': ['off', { allowAsStatement: false }],
// options 禁止警告注释 https://eslint.org/docs/rules/no-warning-comments
'no-warning-comments': [
'off',
{ terms: ['todo', 'fixme', 'xxx'], location: 'start' },
],
// * 禁止使用with语句
'no-with': 'error',
// (options) 需要对象字面量的简写语法(省略冒号:) https://eslint.org/docs/rules/object-shorthand
'object-shorthand': ['off', 'always'],
// (options) 强制函数中的变量要么一起声明要么单独声明 https://eslint.org/docs/rules/one-var
'one-var': ['off', 'always'],
// (options) 要求或强制在变量声明周围换行(每行只有一个变量) https://eslint.org/docs/rules/one-var-declaration-per-line
'one-var-declaration-per-line': ['off', 'initializations'],
// (options) 要求或禁止在可以使用赋值操作符缩写的时候使用 https://eslint.org/docs/rules/operator-assignment
'operator-assignment': ['off', 'always'],
// (options) 要求回调函数或函数表达式使用箭头函数 https://eslint.org/docs/rules/prefer-arrow-callback
'prefer-arrow-callback': [
'off',
{ allowNamedFunctions: false, allowUnboundThis: true },
],
// (options) 如果可以, 建议优先使用const https://eslint.org/docs/rules/prefer-const
'prefer-const': [
'off',
{ destructuring: 'any', ignoreReadBeforeAssign: false },
],
// (options) 如果可以, 建议对数组或对象使用解构 https://eslint.org/docs/rules/prefer-destructuring
'prefer-destructuring': [
'off',
{
VariableDeclarator: { object: true, array: true },
AssignmentExpression: { object: true, array: true },
},
{
enforceForRenamedProperties: false,
},
],
// () 禁用Math.pow, 要求使用 **
'prefer-exponentiation-operator': 'off',
// 建议在正则表达式中使用命名捕获组
'prefer-named-capture-group': 'off',
// () 建议直接使用二进制,八进制,十六进制数字字面量
'prefer-numeric-literals': 'off',
// () 建议使用对象扩展运算符而不是Object.assign
'prefer-object-spread': 'off',
// options 要求使用内置Error对象的实例作为Promise reject的参数 https://eslint.org/docs/rules/prefer-promise-reject-errors
'prefer-promise-reject-errors': ['off', { allowEmptyReject: false }],
// options 建议使用正则表达式字面量而不是正则表达式构造函数 https://eslint.org/docs/rules/prefer-regex-literals
'prefer-regex-literals': ['off', { disallowRedundantWrapping: false }],
// 建议使用剩余参数而不是arguments
'prefer-rest-params': 'off',
// 建议可变参数函数使用扩展语法而不是apply
'prefer-spread': 'off',
// () 建议使用模板字符串而不是字符串拼接
'prefer-template': 'off',
// (options) 对象字面量的属性名需要引号包裹 https://eslint.org/docs/rules/quote-props
'quote-props': [
'off',
'always',
{ keywords: true, unnecessary: true, numbers: true },
],
// options 需要在parseInt中使用基数参数 https://eslint.org/docs/rules/radix
radix: ['off', 'always'],
// 禁止不带await表达式的async函数
'require-await': 'off',
// 强制正则表达式中使用u标志
'require-unicode-regexp': 'off',
// * 禁止生成器函数中没有使用yield关键字
'require-yield': 'error',
// (options) 检查导入声明并按照首字母及别名排序 https://eslint.org/docs/rules/sort-imports
'sort-imports': [
'off',
{
ignoreCase: false,
ignoreDeclarationSort: false,
ignoreMemberSort: false,
memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
allowSeparatedGroups: false,
},
],
// options 要求对象的属性按照字母顺序排序 https://eslint.org/docs/rules/sort-keys
'sort-keys': [
'off',
'asc',
{ caseSensitive: true, minKeys: 2, natural: false },
],
// (options) 要求同一个声明块中的变量按字母顺序排列 https://eslint.org/docs/rules/sort-vars
'sort-vars': ['off', { ignoreCase: false }],
// (options) 需要或禁止注释起点后的空格 https://eslint.org/docs/rules/spaced-comment
'spaced-comment': ['off', 'always', { exceptions: [], markers: [] }],
// (options) 需要或者禁止strict指令 https://eslint.org/docs/rules/strict
strict: ['off', 'safe'],
// 要求Symbol函数有一个描述参数
'symbol-description': 'off',
// 将当前作用域的变量提升到顶部
'vars-on-top': 'off',
// (options) 要求或禁止Yoda条件(字面量的值放在变量前) https://eslint.org/docs/rules/yoda
yoda: ['off', 'never', { exceptRange: false, onlyEquality: false }],
/* Layout & Formatting: These rules care about how the code looks rather than how it executes */
// (options) 强制数组左括号之后右括号之前换行 https://eslint.org/docs/rules/array-bracket-newline
'array-bracket-newline': [
'off',
'consistent',
{ multiline: true, minItems: null },
],
// (options) 强制或禁止数组及解构赋值左右的空格 https://eslint.org/docs/rules/array-bracket-spacing
'array-bracket-spacing': [
'off',
'never',
{ singleValue: true, objectsInArrays: true, arraysInArrays: true },
],
// (options) 强制数组元素之间换行 https://eslint.org/docs/rules/array-element-newline
'array-element-newline': ['off', 'always'],
// (options) 箭头函数参数需要用括号包裹 https://eslint.org/docs/rules/arrow-parens
'arrow-parens': ['off', 'always'],
// (options) 箭头函数箭头的前后需要空格 https://eslint.org/docs/rules/arrow-spacing
'arrow-spacing': ['off', { before: true, after: true }],
// (options) 禁止或强制块作用域括号与内容之间有空格 https://eslint.org/docs/rules/block-spacing
'block-spacing': ['off', 'always'],
// (options) 强制在代码块中使用一致的大括号风格 https://eslint.org/docs/rules/brace-style
'brace-style': ['off', '1tbs', { allowSingleLine: false }],
// (options) 需要或者禁用数组或对象的尾部逗号 https://eslint.org/docs/rules/comma-dangle
'comma-dangle': ['off', 'never'],
// (options) 强制逗号前后的空格样式 https://eslint.org/docs/rules/comma-spacing
'comma-spacing': ['off', { before: false, after: true }],
// (options) 强制使用一致的逗号风格 https://eslint.org/docs/rules/comma-style
'comma-style': ['off', 'last'],
// (options) 禁止或强制计算属性(动态属性)内部的空格样式 https://eslint.org/docs/rules/computed-property-spacing
'computed-property-spacing': ['off', 'never'],
// (options) 强制点号前后的换行风格(与对象一行还是与属性一行) https://eslint.org/docs/rules/dot-location
'dot-location': ['off', 'object'],
// (options) 需要或禁止文件最后添加换行 https://eslint.org/docs/rules/eol-last
'eol-last': ['off', 'always'],
// (options) 要求或禁止在函数名称和调用它的左括号之间使用空格 https://eslint.org/docs/rules/func-call-spacing
'func-call-spacing': ['off', 'never'],
// (options) 强制函数调用的参数之间换行 https://eslint.org/docs/rules/function-call-argument-newline
'function-call-argument-newline': ['off', 'always'],
// (options) 在函数参数或参数的括号内强制执行一致的换行符 https://eslint.org/docs/rules/function-paren-newline
'function-paren-newline': ['off', 'multiline'],
// (options) 强制生成器函数符号*左右的空格 https://eslint.org/docs/rules/generator-star-spacing
'generator-star-spacing': ['off', { before: true, after: false }],
// (options) 强制维持隐式返回的箭头函数方法体的位置的一致性 https://eslint.org/docs/rules/implicit-arrow-linebreak
'implicit-arrow-linebreak': ['off', 'beside'],
// (options) 强制维持代码缩进的一致性 https://eslint.org/docs/rules/indent
indent: ['off', 4],
// (options) 强制在 JSX 属性中一致使用双引号或单引号 https://eslint.org/docs/rules/jsx-quotes
'jsx-quotes': ['off', 'prefer-double'],
// (options) 强制对象字面量属性中的键和值之间保持一致的间距 https://eslint.org/docs/rules/key-spacing
'key-spacing': [
'off',
{ beforeColon: false, afterColon: true, mode: 'strict' },
],
// (options) 强制关键字周围保持一致的间距 https://eslint.org/docs/rules/keyword-spacing
'keyword-spacing': ['off', { before: true, after: true }],
// options 强制单行注释的位置 https://eslint.org/docs/rules/line-comment-position
'line-comment-position': ['off', { position: 'above' }],
// (options) 强制执行一致的行尾样式 https://eslint.org/docs/rules/linebreak-style
'linebreak-style': ['off', 'unix'],
// (options) 要求注释前后空行 https://eslint.org/docs/rules/lines-around-comment
'lines-around-comment': ['off', { beforeBlockComment: true }],
// (options) 要求或禁止类成员之间空行 https://eslint.org/docs/rules/lines-between-class-members
'lines-between-class-members': ['off', 'always'],
// options 强制单行的最大字符数 https://eslint.org/docs/rules/max-len
'max-len': ['off', { code: 80, tabWidth: 4 }],
// options 强制每行允许的最大语句数 https://eslint.org/docs/rules/max-statements-per-line
'max-statements-per-line': ['off', { max: 1 }],
// (options) 强制或禁止三元表达式的操作数之间换行 https://eslint.org/docs/rules/multiline-ternary
'multiline-ternary': ['off', 'always'],
// (options) 强制或禁止new关键字调用无参构造函数的时候省略括号 https://eslint.org/docs/rules/new-parens
'new-parens': ['off', 'always'],
// (options) 每链式调用一个方法后需要换行 https://eslint.org/docs/rules/newline-per-chained-call
'newline-per-chained-call': ['off', { ignoreChainWithDepth: 2 }],
// (options) 禁止不必要的括号 https://eslint.org/docs/rules/no-extra-parens
'no-extra-parens': ['off', 'all'],
// *options 禁止混用tab和空格用于缩进 https://eslint.org/docs/rules/no-mixed-spaces-and-tabs
'no-mixed-spaces-and-tabs': ['error'],
// (options) 禁止不是用于缩进的多个空格 https://eslint.org/docs/rules/no-multi-spaces
'no-multi-spaces': [
'off',
{ ignoreEOLComments: false, exceptions: { Property: true } },
],
// (options) 禁止多个连续的换行 https://eslint.org/docs/rules/no-multiple-empty-lines
'no-multiple-empty-lines': ['off', { max: 2 }],
// options 禁止tab字符 https://eslint.org/docs/rules/no-tabs
'no-tabs': ['off', { allowIndentationTabs: false }],
// (options) 禁止行尾出现尾随空白字符 https://eslint.org/docs/rules/no-trailing-spaces
'no-trailing-spaces': [
'off',
{ skipBlankLines: false, ignoreComments: false },
],
// () 如果链式调用的属性在同一行则.号前不允许有空白
'no-whitespace-before-property': 'off',
// (options) 强制单行语句执行一致的位置 https://eslint.org/docs/rules/nonblock-statement-body-position
'nonblock-statement-body-position': ['off', 'beside'],
// (options) 强制大括号内换行符的一致性 https://eslint.org/docs/rules/object-curly-newline
'object-curly-newline': ['off', { consistent: true }],
// (options) 强制在大括号中使用一致的空格 https://eslint.org/docs/rules/object-curly-spacing
'object-curly-spacing': ['off', 'never'],
// (options) 强制将对象的属性放在不同的行上 https://eslint.org/docs/rules/object-property-newline
'object-property-newline': ['off', { allowAllPropertiesOnSameLine: false }],
// (options) 强制运算符执行一致的换行样式 https://eslint.org/docs/rules/operator-linebreak
'operator-linebreak': [
'off',
'after',
{ overrides: { '?': 'before', ':': 'before' } },
],
// (options) 要求或禁止块内执行一致的空行填充 https://eslint.org/docs/rules/padded-blocks
'padded-blocks': ['off', 'always', { allowSingleLineBlocks: false }],
// (options) 要求或禁止语句间空行填充 https://eslint.org/docs/rules/padding-line-between-statements
'padding-line-between-statements': ['off'],
// (options) 强制一致使用反引号、双引号或单引号 https://eslint.org/docs/rules/quotes
quotes: ['off', 'double'],
// (options) 强制剩余(rest)和扩展(spread)运算符及其表达式之间保持一致的间距 https://eslint.org/docs/rules/rest-spread-spacing
'rest-spread-spacing': ['off', 'never'],
// (options) 要求或禁止分号的使用,而不是自动插入分号 https://eslint.org/docs/rules/semi
semi: ['off', 'always', { omitLastInOneLineBlock: true }],
// (options) 强制分号前后的空格样式 https://eslint.org/docs/rules/semi-spacing
'semi-spacing': ['off', { before: false, after: true }],
// (options) 强制分号附近换行符的位置 https://eslint.org/docs/rules/semi-style
'semi-style': ['off', 'last'],
// (options) 需要或禁止块之前的空格 https://eslint.org/docs/rules/space-before-blocks
'space-before-blocks': ['off', 'always'],
// (options) 需要或禁止函数名与括号之间的空格 https://eslint.org/docs/rules/space-before-function-paren
'space-before-function-paren': ['off', 'always'],
// (options) 禁止或强制括号内部的空格样式 https://eslint.org/docs/rules/space-in-parens
'space-in-parens': ['off', 'never'],
// (options) 需要中缀运算符周围有空格 https://eslint.org/docs/rules/space-infix-ops
'space-infix-ops': ['off', { int32Hint: false }],
// (options) 要求或禁止在一元运算符之前/之后使用空格 https://eslint.org/docs/rules/space-unary-ops
'space-unary-ops': ['off', { words: true, nonwords: false, overrides: {} }],
// (options) 强制switch语句中case,default子句冒号周围的空格样式 https://eslint.org/docs/rules/switch-colon-spacing
'switch-colon-spacing': ['off', { before: false, after: true }],
// (options) 强制模板字符串变量内部的间距 https://eslint.org/docs/rules/template-curly-spacing
'template-curly-spacing': ['off', 'never'],
// (options) 要求或禁止模板标签函数和模板字面量之间的间距 https://eslint.org/docs/rules/template-tag-spacing
'template-tag-spacing': ['off', 'never'],
// (options) 需要或禁止Unicode字节顺序标记 https://eslint.org/docs/rules/unicode-bom
'unicode-bom': ['off', 'never'],
// (options) 需要用括号包裹立即调用函数表达式 https://eslint.org/docs/rules/wrap-iife
'wrap-iife': ['off', 'outside', { functionPrototypeMethods: false }],
// () 需要用括号包裹正则表达式字面量
'wrap-regex': 'off',
// (options) 强制yield*表达式中*周围的空格 https://eslint.org/docs/rules/yield-star-spacing
'yield-star-spacing': ['off', { before: false, after: true }],
}
}
eslint 推荐配置
大部分还是使用recommended打勾的规则,其中layout和formatting部分的规则可以使用prettier来进行代码格式化,所以可以不用。
module.exports = {
extends: ['eslint:recommended'],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
rules: {
'no-debugger': 'error',
'default-param-last': 'error',
eqeqeq: ['warn', 'smart'],
'prefer-const': ['warn', { destructuring: 'all' }],
'no-empty': ['warn', { allowEmptyCatch: true }],
'no-unused-expressions': 'warn',
'require-await': 'warn',
'no-useless-escape': 'warn',
'no-warning-comments': [
'warn',
{ terms: ['todo', 'fixme', 'xxx'], location: 'start' },
],
}
}
这样的配置对于有特殊文件的比如vue,ts,jsx,tsx就不太适合了,还需要添加另外的插件及规则。