eslint内置规则介绍

内置规则

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就不太适合了,还需要添加另外的插件及规则。

上一篇:go gomemcache包源码分析


下一篇:Vue插件+element-ui写form自定义验证规则