eslit比较常见的配置

//ESLint 4.5.0,参考了eslint官方以及alloyteam团队配置
 
module.exports = {
    parser: 'babel-eslint',
    parserOptions: {
        ecmaVersion: 2017,
        sourceType: 'module',
        ecmaFeatures: {
            experimentalObjectRestSpread: true,
            jsx: true
        }
    },
    env: {
        browser: true,
        node: true,
        commonjs: true,
        es6: true
    },
    // 以当前目录为根目录,不再向上查找 .eslintrc.js
    root: true,
    rules: {
        //
        //
        // 可能的错误
        // 这些规则与 JavaScript 代码中可能的语法错误或逻辑错误有关
        //
        // 禁止 for 循环出现方向错误的循环,比如 for (i = 0; i < 10; i--)
        'for-direction': 'error',
        // getter 必须有返回值,并且禁止返回空,比如 return;
        'getter-return': [
            'error',
            {
                allowImplicit: false
            }
        ],
        // 禁止将 await 写在循环里,因为这样就无法同时发送多个异步请求了
        // @off 要求太严格了,有时需要在循环中写 await
        'no-await-in-loop': 'off',
        // 禁止与负零进行比较
        'no-compare-neg-zero': 'error',
        // 禁止在 if, for, while 里使用赋值语句,除非这个赋值语句被括号包起来了
        'no-cond-assign': [
            'error',
            'except-parens'
        ],
        // 禁止使用 console
        // @off console 的使用很常见
        'no-console': 'off',
        // 禁止将常量作为 if, for, while 里的测试条件,比如 if (true), for (;;),除非循环内部有 break 语句
        'no-constant-condition': [
            'error',
            {
                checkLoops: false
            }
        ],
        // 禁止在正则表达式中出现 Ctrl 键的 ASCII 表示,即禁止使用 /\x1f/
        // 开启此规则,因为字符串中一般不会出现 Ctrl 键,所以一旦出现了,可能是一个代码错误
        'no-control-regex': 'error',
        // @fixable 禁止使用 debugger
        'no-debugger': 'error',
        // 禁止在函数参数中出现重复名称的参数
        'no-dupe-args': 'error',
        // 禁止在对象字面量中出现重复名称的键名
        'no-dupe-keys': 'error',
        // 禁止在 switch 语句中出现重复测试表达式的 case
        'no-duplicate-case': 'error',
        // 禁止出现空代码块
        'no-empty': [
            'error',
            {
                allowEmptyCatch: true
            }
        ],
        // 禁止在正则表达式中使用空的字符集 []
        'no-empty-character-class': 'error',
        // 禁止将 catch 的第一个参数 error 重新赋值
        'no-ex-assign': 'error',
        // @fixable 禁止在测试表达式中使用 Boolean
        'no-extra-boolean-cast': 'error',
        // @fixable 禁止出现多余的括号,比如 (a * b) + c
        // @off 多余的括号可以使代码更清晰
        'no-extra-parens': 'off',
        // @fixable 禁止出现多于的分号
        'no-extra-semi': 'error',
        // 禁止将一个函数申明重新赋值,如:
        // function foo() {}
        // foo = bar
        'no-func-assign': 'error',
        // 禁止在 if 内出现函数申明或使用 var 定义变量
        'no-inner-declarations': [
            'error',
            'both'
        ],
        // 禁止出现非法的正则表达式
        'no-invalid-regexp': 'error',
        // 禁止使用特殊空白符(比如全角空格),除非是出现在字符串、正则表达式或模版字符串中
        'no-irregular-whitespace': [
            'error',
            {
                skipStrings: true,
                skipComments: false,
                skipRegExps: true,
                skipTemplates: true
            }
        ],
        // 禁止将 Math, JSON 或 Reflect 直接作为函数调用,必须作为类使用
        'no-obj-calls': 'error',
        // 禁止使用 hasOwnProperty, isPrototypeOf 或 propertyIsEnumerable
        // @off 很多地方会用到 hasOwnProperty
        'no-prototype-builtins': 'off',
        // @fixable 禁止在正则表达式中出现连续的空格,必须使用 /foo {3}bar/ 代替
        'no-regex-spaces': 'error',
        // 禁止在数组中出现连续的逗号,如 let foo = [,,]
        'no-sparse-arrays': 'error',
        // 禁止在普通字符串中出现模版字符串的变量形式,如 'Hello ${name}!'
        'no-template-curly-in-string': 'error',
        // 禁止出现难以理解的多行表达式,如:
        // let x = function () {}
        // `hello`
        'no-unexpected-multiline': 'error',
        // 禁止在 return, throw, break 或 continue 之后还有代码
        'no-unreachable': 'error',
        // 禁止在 finally 中出现 return, throw, break 或 continue
        'no-unsafe-finally': 'error',
        // @fixable 禁止在 in 或 instanceof 操作符的左侧使用感叹号,如 if (!key in object)
        'no-unsafe-negation': 'error',
        // 必须使用 isNaN(foo) 而不是 foo === NaN
        'use-isnan': 'error',
        // 注释必须符合 jsdoc 的规范
        // @off jsdoc 要求太严格
        'valid-jsdoc': 'off',
        // typeof 表达式比较的对象必须是 'undefined', 'object', 'boolean', 'number', 'string', 'function' 或 'symbol'
        'valid-typeof': 'error',
 
        //
        //
        // 最佳实践
        // 这些规则通过一些最佳实践帮助你避免问题
        //
        // 有 setter 的地方必须有 getter,有 getter 的地方可以没有 setter
        'accessor-pairs': [
            'error',
            {
                setWithoutGet: true,
                getWithoutSet: false
            }
        ],
        // 数组的一些方法(map, reduce 等)的回调函数中,必须有返回值
        // @off 太严格了
        'array-callback-return': 'off',
        // 将 var 定义的变量视为块作用域,禁止在块外使用
        'block-scoped-var': 'error',
        // 在类的非静态方法中,必须存在对 this 的引用
        // @off 太严格了
        'class-methods-use-this': 'off',
        // 禁止函数的循环复杂度超过 10,https://en.wikipedia.org/wiki/Cyclomatic_complexity
        'complexity': [
            'error',
            {
                max: 10
            }
        ],
        // 禁止函数在不同分支返回不同类型的值
        // @off 太严格了
        'consistent-return': 'off',
        // @fixable if 后面必须要有 {,除非是单行 if
        'curly': [
            'error',
            'multi-line',
            'consistent'
        ],
        // switch 语句必须有 default
        // @off 太严格了
        'default-case': 'off',
        // @fixable 链式调用的时候,点号必须放在第二行开头处,禁止放在第一行结尾处
        'dot-location': [
            'error',
            'property'
        ],
        // @fixable 禁止出现 foo['bar'],必须写成 foo.bar
        // @off 当需要写一系列属性的时候,可以更统一
        'dot-notation': 'off',
        // @fixable 必须使用 === 或 !==,禁止使用 == 或 !=
        'eqeqeq': [
            'error',
            'always'
        ],
        // for in 内部必须有 hasOwnProperty
        'guard-for-in': 'error',
        // 禁止使用 alert
        // @off alert 很常用
        'no-alert': 'off',
        // 禁止使用 caller 或 callee
        'no-caller': 'error',
        // switch 的 case 内有变量定义的时候,必须使用大括号将 case 内变成一个代码块
        'no-case-declarations': 'error',
        // 禁止在正则表达式中出现没必要的转义符
        // @off 多于的转义符没有害处,反而还可以使代码更易懂
        'no-div-regex': 'off',
        // @fixable 禁止在 else 内使用 return,必须改为提前结束
        // @off else 中使用 return 可以使代码结构更清晰
        'no-else-return': 'off',
        // 不允许有空函数,除非是将一个空函数设置为某个项的默认值
        'no-empty-function': [
            'error',
            {
                allow: [
                    'functions',
                    'arrowFunctions'
                ]
            }
        ],
        // 禁止解构中出现空 {} 或 []
        'no-empty-pattern': 'error',
        // 禁止使用 foo == null 或 foo != null,必须使用 foo === null 或 foo !== null
        'no-eq-null': 'error',
        // 禁止使用 eval
        'no-eval': 'error',
        // 禁止修改原生对象
        'no-extend-native': 'error',
        // @fixable 禁止出现没必要的 bind
        'no-extra-bind': 'error',
        // @fixable 禁止出现没必要的 label
        'no-extra-label': 'error',
        // switch 的 case 内必须有 break, return 或 throw
        'no-fallthrough': 'error',
        // @fixable 表示小数时,禁止省略 0,比如 .5
        'no-floating-decimal': 'error',
        // 禁止对全局变量赋值
        'no-global-assign': 'error',
        // @fixable 禁止使用 !! ~ 等难以理解的运算符
        // @off 它们的性能更好
        'no-implicit-coercion': 'off',
        // 禁止在全局作用域下定义变量或申明函数
        'no-implicit-globals': 'error',
        // 禁止在 setTimeout 或 setInterval 中传入字符串,如 setTimeout('alert("Hi!")', 100);
        'no-implied-eval': 'error',
        // 禁止在类之外的地方使用 this
        // @off this 的使用很灵活,事件回调中可以表示当前元素,函数也可以先用 this,等以后被调用的时候再 call
        'no-invalid-this': 'off',
        // 禁止使用 __iterator__
        'no-iterator': 'error',
        // 禁止使用 label
        'no-labels': 'error',
        // 禁止使用没必要的 {} 作为代码块
        'no-lone-blocks': 'error',
        // 禁止在循环内的函数中出现循环体条件语句中定义的变量,比如:
        // for (var i = 0; i < 10; i++) {
        //     (function () { return i })();
        // }
        'no-loop-func': 'error',
        // 禁止使用 magic numbers
        // @off 太严格了
        'no-magic-numbers': 'off',
        // @fixable 禁止出现连续的多个空格,除非是注释前,或对齐对象的属性、变量定义、import 等
        'no-multi-spaces': [
            'error',
            {
                ignoreEOLComments: true,
                exceptions: {
                    Property: true,
                    BinaryExpression: false,
                    VariableDeclarator: true,
                    ImportDeclaration: true
                }
            }
        ],
        // 禁止使用 \ 来换行字符串
        'no-multi-str': 'error',
        // 禁止直接 new 一个类而不赋值
        'no-new': 'error',
        // 禁止使用 new Function,比如 let x = new Function("a", "b", "return a + b");
        'no-new-func': 'error',
        // 禁止使用 new 来生成 String, Number 或 Boolean
        'no-new-wrappers': 'error',
        // 禁止使用 0 开头的数字表示八进制数
        'no-octal': 'error',
        // 禁止使用八进制的转义符
        'no-octal-escape': 'error',
        // 禁止对函数的参数重新赋值
        'no-param-reassign': 'error',
        // 禁止使用 __proto__
        'no-proto': 'error',
        // 禁止重复定义变量
        'no-redeclare': 'error',
        // 禁止使用指定的对象属性
        // @off 它用于限制某个具体的 api 不能使用
        'no-restricted-properties': 'off',
        // 禁止在 return 语句里赋值
        'no-return-assign': [
            'error',
            'always'
        ],
        // 禁止在 return 语句里使用 await
        'no-return-await': 'error',
        // 禁止出现 location.href = 'javascript:void(0)';
        // @off javascript:void(0) 应该允许使用
        'no-script-url': 'off',
        // 禁止将自己赋值给自己
        'no-self-assign': 'error',
        // 禁止将自己与自己比较
        'no-self-compare': 'error',
        // 禁止使用逗号操作符
        'no-sequences': 'error',
        // 禁止 throw 字面量,必须 throw 一个 Error 对象
        'no-throw-literal': 'error',
        // 循环内必须对循环条件的变量有修改
        'no-unmodified-loop-condition': 'error',
        // 禁止无用的表达式
        'no-unused-expressions': [
            'error',
            {
                allowShortCircuit: true,
                allowTernary: true,
                allowTaggedTemplates: true
            }
        ],
        // @fixable 禁止出现没用的 label
        'no-unused-labels': 'error',
        // 禁止出现没必要的 call 或 apply
        'no-useless-call': 'error',
        // 禁止出现没必要的字符串连接
        'no-useless-concat': 'error',
        // 禁止出现没必要的转义
        // @off 转义可以使代码更易懂
        'no-useless-escape': 'off',
        // @fixable 禁止没必要的 return
        // @off 没必要限制 return
        'no-useless-return': 'off',
        // 禁止使用 void
        'no-void': 'error',
        // 禁止注释中出现 TODO 和 FIXME
        // @off TODO 很常用
        'no-warning-comments': 'off',
        // 禁止使用 with
        'no-with': 'error',
        // Promise 的 reject 中必须传入 Error 对象,而不是字面量
        'prefer-promise-reject-errors': 'error',
        // parseInt 必须传入第二个参数
        'radix': 'error',
        // async 函数中必须存在 await 语句
        'require-await': 'error',
        // var 必须在作用域的最前面
        // @off var 不在最前面也是很常见的用法
        'vars-on-top': 'off',
        // @fixable 立即执行的函数必须符合如下格式 (function () { alert('Hello') })()
        'wrap-iife': [
            'error',
            'inside',
            {
                functionPrototypeMethods: true
            }
        ],
        // @fixable 必须使用 if (foo === 5) 而不是 if (5 === foo)
        'yoda': [
            'error',
            'never',
            {
                onlyEquality: true
            }
        ],
 
        //
        //
        // 严格模式
        // 这些规则与严格模式指令有关
        //
        // @fixable 禁止使用 'strict';
        'strict': [
            'error',
            'never'
        ],
 
        //
        //
        // 变量
        // 这些规则与变量申明有关
        //
        // 变量必须在定义的时候赋值
        // @off 先定义后赋值很常见
        'init-declarations': 'off',
        // 禁止 catch 的参数名与定义过的变量重复
        // @off 太严格了
        'no-catch-shadow': 'off',
        // 禁止使用 delete
        'no-delete-var': 'error',
        // 禁止 label 名称与定义过的变量重复
        'no-label-var': 'error',
        // 禁止使用指定的全局变量
        // @off 它用于限制某个具体的变量名不能使用
        'no-restricted-globals': 'off',
        // 禁止变量名与上层作用域内的定义过的变量重复
        'no-shadow': [
            'error',
            {
                builtinGlobals: false,
                hoist: 'functions',
                allow: [
                    'resolve',
                    'reject',
                    'done',
                    'cb',
                    'callback',
                    'error',
                    'err',
                    'e'
                ]
            }
        ],
        // 禁止使用保留字作为变量名
        'no-shadow-restricted-names': 'error',
        // 禁止使用未定义的变量
        'no-undef': [
            'error',
            {
                typeof: false
            }
        ],
        // @fixable 禁止将 undefined 赋值给变量
        'no-undef-init': 'error',
        // 禁止对 undefined 重新赋值
        'no-undefined': 'error',
        // 定义过的变量必须使用
        'no-unused-vars': [
            'error',
            {
                vars: 'all',
                args: 'none',
                caughtErrors: 'none'
            }
        ],
        // 变量必须先定义后使用
        'no-use-before-define': [
            'error',
            {
                functions: false,
                classes: false,
                variables: false
            }
        ],
 
        //
        //
        // Node.js 和 CommonJS
        // 这些规则与在 Node.js 中运行的代码或浏览器中使用的 CommonJS 有关
        //
        // callback 之后必须立即 return
        // @off Limitations 太多了
        'callback-return': 'off',
        // require 必须在全局作用域下
        // @off 条件加载很常见
        'global-require': 'off',
        // callback 中的 error 必须被处理
        'handle-callback-err': 'error',
        // 禁止直接使用 Buffer
        'no-buffer-constructor': 'error',
        // 相同类型的 require 必须放在一起
        // @off 太严格了
        'no-mixed-requires': 'off',
        // 禁止直接 new require('foo')
        'no-new-require': 'error',
        // 禁止对 __dirname 或 __filename 使用字符串连接
        'no-path-concat': 'error',
        // 禁止使用 process.env.NODE_ENV
        // @off 使用很常见
        'no-process-env': 'off',
        // 禁止使用 process.exit(0)
        // @off 使用很常见
        'no-process-exit': 'off',
        // 禁止使用指定的模块
        // @off 它用于限制某个具体的模块不能使用
        'no-restricted-modules': 'off',
        // 禁止使用 node 中的同步的方法,比如 fs.readFileSync
        // @off 使用很常见
        'no-sync': 'off',
 
        //
        //
        // 风格问题
        // 这些规则与代码风格有关,所以是非常主观的
        //
        // @fixable 配置数组的中括号内前后的换行格式
        // @off 配置项无法配制成想要的样子
        'array-bracket-newline': 'off',
        // @fixable 数组的括号内的前后禁止有空格
        'array-bracket-spacing': [
            'error',
            'never'
        ],
        // @fixable 配置数组的元素之间的换行格式
        // @off 允许一行包含多个元素,方便大数量的数组的书写
        'array-element-newline': 'off',
        // @fixable 代码块如果在一行内,那么大括号内的首尾必须有空格,比如 function () { alert('Hello') }
        'block-spacing': [
            'error',
            'always'
        ],
        // @fixable if 与 else 的大括号风格必须一致
        // @off else 代码块可能前面需要有一行注释
        'brace-style': 'off',
        // 变量名必须是 camelcase 风格的
        // @off 很多 api 或文件名都不是 camelcase
        'camelcase': 'off',
        // @fixable 注释的首字母必须大写
        // @off 没必要限制
        'capitalized-comments': 'off',
        // @fixable 对象的最后一个属性末尾必须有逗号
        // @off 没必要限制
        'comma-dangle': 'off',
        // @fixable 逗号前禁止有空格,逗号后必须要有空格
        'comma-spacing': [
            'error',
            {
                'before': false,
                'after': true
            }
        ],
        // @fixable 禁止在行首写逗号
        'comma-style': [
            'error',
            'last'
        ],
        // @fixable 用作对象的计算属性时,中括号内的首尾禁止有空格
        'computed-property-spacing': [
            'error',
            'never'
        ],
        // 限制 this 的别名
        // @off 没必要限制
        'consistent-this': 'off',
        // @fixable 文件最后一行必须有一个空行
        // @off 没必要限制
        'eol-last': 'off',
        // @fixable 函数名和执行它的括号之间禁止有空格
        'func-call-spacing': [
            'error',
            'never'
        ],
        // 函数赋值给变量的时候,函数名必须与变量名一致
        'func-name-matching': [
            'error',
            'always',
            {
                includeCommonJSModuleExports: false
            }
        ],
        // 函数必须有名字
        // @off 没必要限制
        'func-names': 'off',
        // 必须只使用函数申明或只使用函数表达式
        // @off 没必要限制
        'func-style': 'off',
        // 禁止使用指定的标识符
        // @off 它用于限制某个具体的标识符不能使用
        'id-blacklist': 'off',
        // 限制变量名长度
        // @off 没必要限制变量名长度
        'id-length': 'off',
        // 限制变量名必须匹配指定的正则表达式
        // @off 没必要限制变量名
        'id-match': 'off',
        // @fixable 一个缩进必须用四个空格替代
        'indent': [
            'error',
            4,
            {
                SwitchCase: 1,
                flatTernaryExpressions: true
            }
        ],
        // @fixable jsx 中的属性必须用双引号
        'jsx-quotes': [
            'error',
            'prefer-double'
        ],
        // @fixable 对象字面量中冒号前面禁止有空格,后面必须有空格
        'key-spacing': [
            'error',
            {
                beforeColon: false,
                afterColon: true,
                mode: 'strict',
            }
        ],
        // @fixable 关键字前后必须有空格
        'keyword-spacing': [
            'error',
            {
                before: true,
                after: true
            }
        ],
        // 单行注释必须写在上一行
        // @off 没必要限制
        'line-comment-position': 'off',
        // @fixable 限制换行符为 LF 或 CRLF
        // @off 没必要限制
        'linebreak-style': 'off',
        // @fixable 注释前后必须有空行
        // @off 没必要限制
        'lines-around-comment': 'off',
        // 代码块嵌套的深度禁止超过 5 层
        'max-depth': [
            'error',
            5
        ],
        // 限制一行的长度
        // @off 现在编辑器已经很智能了,不需要限制一行的长度
        'max-len': 'off',
        // 限制一个文件最多的行数
        // @off 没必要限制
        'max-lines': 'off',
        // 回调函数嵌套禁止超过 3 层,多了请用 async await 替代
        'max-nested-callbacks': [
            'error',
            3
        ],
        // 函数的参数禁止超过 7 个
        'max-params': [
            'error',
            7
        ],
        // 限制函数块中的语句数量
        // @off 没必要限制
        'max-statements': 'off',
        // 限制一行中的语句数量
        // @off 没必要限制
        'max-statements-per-line': 'off',
        // 三元表达式必须得换行
        // @off 三元表达式可以随意使用
        'multiline-ternary': 'off',
        // new 后面的类名必须首字母大写
        'new-cap': [
            'error',
            {
                newIsCap: true,
                capIsNew: false,
                properties: true
            }
        ],
        // @fixable new 后面的类必须有小括号
        'new-parens': 'error',
        // 链式调用必须换行
        // @off 没必要限制
        'newline-per-chained-call': 'off',
        // 禁止使用 Array 构造函数
        'no-array-constructor': 'error',
        // 禁止使用位运算
        // @off 位运算很常见
        'no-bitwise': 'off',
        // 禁止使用 continue
        // @off continue 很常用
        'no-continue': 'off',
        // 禁止在代码后添加内联注释
        // @off 内联注释很常用
        'no-inline-comments': 'off',
        // @fixable 禁止 else 中只有一个单独的 if
        // @off 单独的 if 可以把逻辑表达的更清楚
        'no-lonely-if': 'off',
        // 禁止混用不同的操作符,比如 let foo = a && b < 0 || c > 0 || d + 1 === 0
        // @off 太严格了,可以由使用者自己去判断如何混用操作符
        'no-mixed-operators': 'off',
        // 禁止混用空格和缩进
        'no-mixed-spaces-and-tabs': 'error',
        // 禁止连续赋值,比如 a = b = c = 5
        // @off 没必要限制
        'no-multi-assign': 'off',
        // @fixable 禁止出现超过三行的连续空行
        'no-multiple-empty-lines': [
            'error',
            {
                max: 3,
                maxEOF: 1,
                maxBOF: 1
            }
        ],
        // 禁止 if 里面有否定的表达式,比如:
        // if (a !== b) {
        //     doSomething();
        // } else {
        //     doSomethingElse();
        // }
        // @off 否定的表达式可以把逻辑表达的更清楚
        'no-negated-condition': 'off',
        // 禁止使用嵌套的三元表达式,比如 a ? b : c ? d : e
        // @off 没必要限制
        'no-nested-ternary': 'off',
        // 禁止直接 new Object
        'no-new-object': 'error',
        // 禁止使用 ++ 或 --
        // @off 没必要限制
        'no-plusplus': 'off',
        // 禁止使用特定的语法
        // @off 它用于限制某个具体的语法不能使用
        'no-restricted-syntax': 'off',
        // 禁止使用 tabs
        'no-tabs': 'error',
        // 禁止使用三元表达式
        // @off 三元表达式很常用
        'no-ternary': 'off',
        // @fixable 禁止行尾有空格
        'no-trailing-spaces': 'error',
        // 禁止变量名出现下划线
        // @off 下划线在变量名中很常用
        'no-underscore-dangle': 'off',
        // @fixable 必须使用 !a 替代 a ? false : true
        // @off 后者表达的更清晰
        'no-unneeded-ternary': 'off',
        // @fixable 禁止属性前有空格,比如 foo. bar()
        'no-whitespace-before-property': 'error',
        // @fixable 禁止 if 后面不加大括号而写两行代码
        'nonblock-statement-body-position': [
            'error',
            'beside',
            {
                overrides: {
                    while: 'below'
                }
            }
        ],
        // @fixable 大括号内的首尾必须有换行
        'object-curly-newline': [
            'error',
            {
                multiline: true,
                consistent: true
            }
        ],
        // @fixable 对象字面量只有一行时,大括号内的首尾必须有空格
        'object-curly-spacing': [
            'error',
            'always',
            {
                arraysInObjects: true,
                objectsInObjects: false
            }
        ],
        // @fixable 对象字面量内的属性每行必须只有一个
        // @off 没必要限制
        'object-property-newline': 'off',
        // 禁止变量申明时用逗号一次申明多个
        'one-var': [
            'error',
            'never'
        ],
        // @fixable 变量申明必须每行一个
        'one-var-declaration-per-line': [
            'error',
            'always'
        ],
        // @fixable 必须使用 x = x + y 而不是 x += y
        // @off 没必要限制
        'operator-assignment': 'off',
        // @fixable 需要换行的时候,操作符必须放在行末,比如:
        // let foo = 1 +
 
        // @off 有时放在第二行开始处更易读
        'operator-linebreak': 'off',
        // @fixable 代码块首尾必须要空行
        // @off 没必要限制
        'padded-blocks': 'off',
        // @fixable 限制语句之间的空行规则,比如变量定义完之后必须要空行
        // @off 没必要限制
        'padding-line-between-statements': 'off',
        // @fixable 对象字面量的键名禁止用引号括起来
        // @off 没必要限制
        'quote-props': 'off',
        // @fixable 必须使用单引号,禁止使用双引号
        'quotes': [
            'error',
            'single',
            {
                avoidEscape: true,
                allowTemplateLiterals: true
            }
        ],
        // 必须使用 jsdoc 风格的注释
        // @off 太严格了
        'require-jsdoc': 'off',
        // @fixable 结尾必须有分号
        'semi': [
            'error',
            'always',
            {
                omitLastInOneLineBlock: true
            }
        ],
        // @fixable 一行有多个语句时,分号前面禁止有空格,分号后面必须有空格
        'semi-spacing': [
            'error',
            {
                before: false,
                after: true
            }
        ],
        // @fixable 分号必须写在行尾,禁止在行首出现
        'semi-style': [
            'error',
            'last'
        ],
        // 对象字面量的键名必须排好序
        // @off 没必要限制
        'sort-keys': 'off',
        // 变量申明必须排好序
        // @off 没必要限制
        'sort-vars': 'off',
        // @fixable if, function 等的大括号之前必须要有空格,比如 if (a) {
        'space-before-blocks': [
            'error',
            'always'
        ],
        // @fixable function 的小括号之前必须要有空格
        'space-before-function-paren': [
            'error',
            {
                anonymous: 'always',
                named: 'never',
                asyncArrow: 'always'
            }
        ],
        // @fixable 小括号内的首尾禁止有空格
        'space-in-parens': [
            'error',
            'never'
        ],
        // @fixable 操作符左右必须有空格,比如 let sum = 1 + 2;
        'space-infix-ops': 'error',
        // @fixable new, typeof 等后面必须有空格,++, -- 等禁止有空格,比如:
        // let foo = new Person();
        // bar = bar++;
        'space-unary-ops': [
            'error',
            {
                words: true,
                nonwords: false
            }
        ],
        // @fixable 注释前后必须有空格
        'spaced-comment': [
            'error',
            'always',
            {
                block: {
                    exceptions: [
                        '*'
                    ],
                    balanced: true
                }
            }
        ],
        // @fixable case 的冒号前禁止有空格,冒号后必须有空格
        'switch-colon-spacing': [
            'error',
            {
                after: true,
                before: false
            }
        ],
        // @fixable 模版字符串的 tag 之后禁止有空格,比如 tag`Hello World`
        'template-tag-spacing': [
            'error',
            'never'
        ],
        // @fixable 文件开头禁止有 BOM
        'unicode-bom': [
            'error',
            'never'
        ],
        // @fixable 正则表达式必须有括号包起来
        // @off 没必要限制
        'wrap-regex': 'off',
 
        //
        //
        // ECMAScript 6
        // 这些规则与 ES6(即通常所说的 ES2015)有关
        //
        // @fixable 箭头函数能够省略 return 的时候,必须省略,比如必须写成 () => 0,禁止写成 () => { return 0 }
        // @off 箭头函数的返回值,应该允许灵活设置
        'arrow-body-style': 'off',
        // @fixable 箭头函数只有一个参数的时候,必须加括号
        // @off 应该允许灵活设置
        'arrow-parens': 'off',
        // @fixable 箭头函数的箭头前后必须有空格
        'arrow-spacing': [
            'error',
            {
                before: true,
                after: true
            }
        ],
        // constructor 中必须有 super
        'constructor-super': 'error',
        // @fixable generator 的 * 前面禁止有空格,后面必须有空格
        'generator-star-spacing': [
            'error',
            {
                before: false,
                after: true
            }
        ],
        // 禁止对定义过的 class 重新赋值
        'no-class-assign': 'error',
        // @fixable 禁止出现难以理解的箭头函数,比如 let x = a => 1 ? 2 : 3
        'no-confusing-arrow': 'error',
        // 禁止对使用 const 定义的常量重新赋值
        'no-const-assign': 'error',
        // 禁止重复定义类
        'no-dupe-class-members': 'error',
        // 禁止重复 import 模块
        'no-duplicate-imports': 'error',
        // 禁止使用 new 来生成 Symbol
        'no-new-symbol': 'error',
        // 禁止 import 指定的模块
        // @off 它用于限制某个具体的模块不能使用
        'no-restricted-imports': 'off',
        // 禁止在 super 被调用之前使用 this 或 super
        'no-this-before-super': 'error',
        // @fixable 禁止出现没必要的计算键名,比如 let a = { ['0']: 0 };
        'no-useless-computed-key': 'error',
        // 禁止出现没必要的 constructor,比如 constructor(value) { super(value) }
        'no-useless-constructor': 'error',
        // @fixable 禁止解构时出现同样名字的的重命名,比如 let { foo: foo } = bar;
        'no-useless-rename': 'error',
        // @fixable 禁止出现 var
        'no-var': 'error',
        // @fixable 必须使用 a = {b} 而不是 a = {b: b}
        // @off 没必要强制要求
        'object-shorthand': 'off',
        // @fixable 必须使用箭头函数作为回调
        // @off 没必要强制要求
        'prefer-arrow-callback': 'off',
        // @fixable 申明后不再被修改的变量必须使用 const 来申明
        // @off 没必要强制要求
        'prefer-const': 'off',
        // 必须使用解构
        // @off 没必要强制要求
        'prefer-destructuring': 'off',
        // @fixable 必须使用 0b11111011 而不是 parseInt('111110111', 2)
        // @off 没必要强制要求
        'prefer-numeric-literals': 'off',
        // 必须使用 ...args 而不是 arguments
        // @off 没必要强制要求
        'prefer-rest-params': 'off',
        // @fixable 必须使用 ... 而不是 apply,比如 foo(...args)
        // @off  apply 很常用
        'prefer-spread': 'off',
        // @fixable 必须使用模版字面量而不是字符串连接
        // @off 字符串连接很常用
        'prefer-template': 'off',
        // generator 函数内必须有 yield
        'require-yield': 'error',
        // @fixable ... 的后面禁止有空格
        'rest-spread-spacing': [
            'error',
            'never'
        ],
        // @fixable import 必须按规则排序
        // @off 没必要强制要求
        'sort-imports': 'off',
        // 创建 Symbol 时必须传入参数
        'symbol-description': 'error',
        // @fixable ${name} 内的首尾禁止有空格
        'template-curly-spacing': [
            'error',
            'never'
        ],
        // @fixable yield* 后面必须要有空格
        'yield-star-spacing': [
            'error',
            'after'
        ]
    }
};
  1. //ESLint 4.5.0,参考了eslint官方以及alloyteam团队配置
  2.  
  3. module.exports ={
  4. parser:'babel-eslint',
  5. parserOptions:{
  6. ecmaVersion:2017,
  7. sourceType:'module',
  8. ecmaFeatures:{
  9. experimentalObjectRestSpread:true,
  10. jsx:true
  11. }
  12. },
  13. env:{
  14. browser:true,
  15. node:true,
  16. commonjs:true,
  17. es6:true
  18. },
  19. // 以当前目录为根目录,不再向上查找 .eslintrc.js
  20. root:true,
  21. rules:{
  22. //
  23. //
  24. // 可能的错误
  25. // 这些规则与 JavaScript 代码中可能的语法错误或逻辑错误有关
  26. //
  27. // 禁止 for 循环出现方向错误的循环,比如 for (i = 0; i < 10; i--)
  28. 'for-direction':'error',
  29. // getter 必须有返回值,并且禁止返回空,比如 return;
  30. 'getter-return':[
  31. 'error',
  32. {
  33. allowImplicit:false
  34. }
  35. ],
  36. // 禁止将 await 写在循环里,因为这样就无法同时发送多个异步请求了
  37. // @off 要求太严格了,有时需要在循环中写 await
  38. 'no-await-in-loop':'off',
  39. // 禁止与负零进行比较
  40. 'no-compare-neg-zero':'error',
  41. // 禁止在 if, for, while 里使用赋值语句,除非这个赋值语句被括号包起来了
  42. 'no-cond-assign':[
  43. 'error',
  44. 'except-parens'
  45. ],
  46. // 禁止使用 console
  47. // @off console 的使用很常见
  48. 'no-console':'off',
  49. // 禁止将常量作为 if, for, while 里的测试条件,比如 if (true), for (;;),除非循环内部有 break 语句
  50. 'no-constant-condition':[
  51. 'error',
  52. {
  53. checkLoops:false
  54. }
  55. ],
  56. // 禁止在正则表达式中出现 Ctrl 键的 ASCII 表示,即禁止使用 /\x1f/
  57. // 开启此规则,因为字符串中一般不会出现 Ctrl 键,所以一旦出现了,可能是一个代码错误
  58. 'no-control-regex':'error',
  59. // @fixable 禁止使用 debugger
  60. 'no-debugger':'error',
  61. // 禁止在函数参数中出现重复名称的参数
  62. 'no-dupe-args':'error',
  63. // 禁止在对象字面量中出现重复名称的键名
  64. 'no-dupe-keys':'error',
  65. // 禁止在 switch 语句中出现重复测试表达式的 case
  66. 'no-duplicate-case':'error',
  67. // 禁止出现空代码块
  68. 'no-empty':[
  69. 'error',
  70. {
  71. allowEmptyCatch:true
  72. }
  73. ],
  74. // 禁止在正则表达式中使用空的字符集 []
  75. 'no-empty-character-class':'error',
  76. // 禁止将 catch 的第一个参数 error 重新赋值
  77. 'no-ex-assign':'error',
  78. // @fixable 禁止在测试表达式中使用 Boolean
  79. 'no-extra-boolean-cast':'error',
  80. // @fixable 禁止出现多余的括号,比如 (a * b) + c
  81. // @off 多余的括号可以使代码更清晰
  82. 'no-extra-parens':'off',
  83. // @fixable 禁止出现多于的分号
  84. 'no-extra-semi':'error',
  85. // 禁止将一个函数申明重新赋值,如:
  86. // function foo() {}
  87. // foo = bar
  88. 'no-func-assign':'error',
  89. // 禁止在 if 内出现函数申明或使用 var 定义变量
  90. 'no-inner-declarations':[
  91. 'error',
  92. 'both'
  93. ],
  94. // 禁止出现非法的正则表达式
  95. 'no-invalid-regexp':'error',
  96. // 禁止使用特殊空白符(比如全角空格),除非是出现在字符串、正则表达式或模版字符串中
  97. 'no-irregular-whitespace':[
  98. 'error',
  99. {
  100. skipStrings:true,
  101. skipComments:false,
  102. skipRegExps:true,
  103. skipTemplates:true
  104. }
  105. ],
  106. // 禁止将 Math, JSON 或 Reflect 直接作为函数调用,必须作为类使用
  107. 'no-obj-calls':'error',
  108. // 禁止使用 hasOwnProperty, isPrototypeOf 或 propertyIsEnumerable
  109. // @off 很多地方会用到 hasOwnProperty
  110. 'no-prototype-builtins':'off',
  111. // @fixable 禁止在正则表达式中出现连续的空格,必须使用 /foo {3}bar/ 代替
  112. 'no-regex-spaces':'error',
  113. // 禁止在数组中出现连续的逗号,如 let foo = [,,]
  114. 'no-sparse-arrays':'error',
  115. // 禁止在普通字符串中出现模版字符串的变量形式,如 'Hello ${name}!'
  116. 'no-template-curly-in-string':'error',
  117. // 禁止出现难以理解的多行表达式,如:
  118. // let x = function () {}
  119. // `hello`
  120. 'no-unexpected-multiline':'error',
  121. // 禁止在 return, throw, break 或 continue 之后还有代码
  122. 'no-unreachable':'error',
  123. // 禁止在 finally 中出现 return, throw, break 或 continue
  124. 'no-unsafe-finally':'error',
  125. // @fixable 禁止在 in 或 instanceof 操作符的左侧使用感叹号,如 if (!key in object)
  126. 'no-unsafe-negation':'error',
  127. // 必须使用 isNaN(foo) 而不是 foo === NaN
  128. 'use-isnan':'error',
  129. // 注释必须符合 jsdoc 的规范
  130. // @off jsdoc 要求太严格
  131. 'valid-jsdoc':'off',
  132. // typeof 表达式比较的对象必须是 'undefined', 'object', 'boolean', 'number', 'string', 'function' 或 'symbol'
  133. 'valid-typeof':'error',
  134.  
  135. //
  136. //
  137. // 最佳实践
  138. // 这些规则通过一些最佳实践帮助你避免问题
  139. //
  140. // 有 setter 的地方必须有 getter,有 getter 的地方可以没有 setter
  141. 'accessor-pairs':[
  142. 'error',
  143. {
  144. setWithoutGet:true,
  145. getWithoutSet:false
  146. }
  147. ],
  148. // 数组的一些方法(map, reduce 等)的回调函数中,必须有返回值
  149. // @off 太严格了
  150. 'array-callback-return':'off',
  151. // 将 var 定义的变量视为块作用域,禁止在块外使用
  152. 'block-scoped-var':'error',
  153. // 在类的非静态方法中,必须存在对 this 的引用
  154. // @off 太严格了
  155. 'class-methods-use-this':'off',
  156. // 禁止函数的循环复杂度超过 10,https://en.wikipedia.org/wiki/Cyclomatic_complexity
  157. 'complexity':[
  158. 'error',
  159. {
  160. max:10
  161. }
  162. ],
  163. // 禁止函数在不同分支返回不同类型的值
  164. // @off 太严格了
  165. 'consistent-return':'off',
  166. // @fixable if 后面必须要有 {,除非是单行 if
  167. 'curly':[
  168. 'error',
  169. 'multi-line',
  170. 'consistent'
  171. ],
  172. // switch 语句必须有 default
  173. // @off 太严格了
  174. 'default-case':'off',
  175. // @fixable 链式调用的时候,点号必须放在第二行开头处,禁止放在第一行结尾处
  176. 'dot-location':[
  177. 'error',
  178. 'property'
  179. ],
  180. // @fixable 禁止出现 foo['bar'],必须写成 foo.bar
  181. // @off 当需要写一系列属性的时候,可以更统一
  182. 'dot-notation':'off',
  183. // @fixable 必须使用 === 或 !==,禁止使用 == 或 !=
  184. 'eqeqeq':[
  185. 'error',
  186. 'always'
  187. ],
  188. // for in 内部必须有 hasOwnProperty
  189. 'guard-for-in':'error',
  190. // 禁止使用 alert
  191. // @off alert 很常用
  192. 'no-alert':'off',
  193. // 禁止使用 caller 或 callee
  194. 'no-caller':'error',
  195. // switch 的 case 内有变量定义的时候,必须使用大括号将 case 内变成一个代码块
  196. 'no-case-declarations':'error',
  197. // 禁止在正则表达式中出现没必要的转义符
  198. // @off 多于的转义符没有害处,反而还可以使代码更易懂
  199. 'no-div-regex':'off',
  200. // @fixable 禁止在 else 内使用 return,必须改为提前结束
  201. // @off else 中使用 return 可以使代码结构更清晰
  202. 'no-else-return':'off',
  203. // 不允许有空函数,除非是将一个空函数设置为某个项的默认值
  204. 'no-empty-function':[
  205. 'error',
  206. {
  207. allow:[
  208. 'functions',
  209. 'arrowFunctions'
  210. ]
  211. }
  212. ],
  213. // 禁止解构中出现空 {} 或 []
  214. 'no-empty-pattern':'error',
  215. // 禁止使用 foo == null 或 foo != null,必须使用 foo === null 或 foo !== null
  216. 'no-eq-null':'error',
  217. // 禁止使用 eval
  218. 'no-eval':'error',
  219. // 禁止修改原生对象
  220. 'no-extend-native':'error',
  221. // @fixable 禁止出现没必要的 bind
  222. 'no-extra-bind':'error',
  223. // @fixable 禁止出现没必要的 label
  224. 'no-extra-label':'error',
  225. // switch 的 case 内必须有 break, return 或 throw
  226. 'no-fallthrough':'error',
  227. // @fixable 表示小数时,禁止省略 0,比如 .5
  228. 'no-floating-decimal':'error',
  229. // 禁止对全局变量赋值
  230. 'no-global-assign':'error',
  231. // @fixable 禁止使用 !! ~ 等难以理解的运算符
  232. // @off 它们的性能更好
  233. 'no-implicit-coercion':'off',
  234. // 禁止在全局作用域下定义变量或申明函数
  235. 'no-implicit-globals':'error',
  236. // 禁止在 setTimeout 或 setInterval 中传入字符串,如 setTimeout('alert("Hi!")', 100);
  237. 'no-implied-eval':'error',
  238. // 禁止在类之外的地方使用 this
  239. // @off this 的使用很灵活,事件回调中可以表示当前元素,函数也可以先用 this,等以后被调用的时候再 call
  240. 'no-invalid-this':'off',
  241. // 禁止使用 __iterator__
  242. 'no-iterator':'error',
  243. // 禁止使用 label
  244. 'no-labels':'error',
  245. // 禁止使用没必要的 {} 作为代码块
  246. 'no-lone-blocks':'error',
  247. // 禁止在循环内的函数中出现循环体条件语句中定义的变量,比如:
  248. // for (var i = 0; i < 10; i++) {
  249. // (function () { return i })();
  250. // }
  251. 'no-loop-func':'error',
  252. // 禁止使用 magic numbers
  253. // @off 太严格了
  254. 'no-magic-numbers':'off',
  255. // @fixable 禁止出现连续的多个空格,除非是注释前,或对齐对象的属性、变量定义、import 等
  256. 'no-multi-spaces':[
  257. 'error',
  258. {
  259. ignoreEOLComments:true,
  260. exceptions:{
  261. Property:true,
  262. BinaryExpression:false,
  263. VariableDeclarator:true,
  264. ImportDeclaration:true
  265. }
  266. }
  267. ],
  268. // 禁止使用 \ 来换行字符串
  269. 'no-multi-str':'error',
  270. // 禁止直接 new 一个类而不赋值
  271. 'no-new':'error',
  272. // 禁止使用 new Function,比如 let x = new Function("a", "b", "return a + b");
  273. 'no-new-func':'error',
  274. // 禁止使用 new 来生成 String, Number 或 Boolean
  275. 'no-new-wrappers':'error',
  276. // 禁止使用 0 开头的数字表示八进制数
  277. 'no-octal':'error',
  278. // 禁止使用八进制的转义符
  279. 'no-octal-escape':'error',
  280. // 禁止对函数的参数重新赋值
  281. 'no-param-reassign':'error',
  282. // 禁止使用 __proto__
  283. 'no-proto':'error',
  284. // 禁止重复定义变量
  285. 'no-redeclare':'error',
  286. // 禁止使用指定的对象属性
  287. // @off 它用于限制某个具体的 api 不能使用
  288. 'no-restricted-properties':'off',
  289. // 禁止在 return 语句里赋值
  290. 'no-return-assign':[
  291. 'error',
  292. 'always'
  293. ],
  294. // 禁止在 return 语句里使用 await
  295. 'no-return-await':'error',
  296. // 禁止出现 location.href = 'javascript:void(0)';
  297. // @off javascript:void(0) 应该允许使用
  298. 'no-script-url':'off',
  299. // 禁止将自己赋值给自己
  300. 'no-self-assign':'error',
  301. // 禁止将自己与自己比较
  302. 'no-self-compare':'error',
  303. // 禁止使用逗号操作符
  304. 'no-sequences':'error',
  305. // 禁止 throw 字面量,必须 throw 一个 Error 对象
  306. 'no-throw-literal':'error',
  307. // 循环内必须对循环条件的变量有修改
  308. 'no-unmodified-loop-condition':'error',
  309. // 禁止无用的表达式
  310. 'no-unused-expressions':[
  311. 'error',
  312. {
  313. allowShortCircuit:true,
  314. allowTernary:true,
  315. allowTaggedTemplates:true
  316. }
  317. ],
  318. // @fixable 禁止出现没用的 label
  319. 'no-unused-labels':'error',
  320. // 禁止出现没必要的 call 或 apply
  321. 'no-useless-call':'error',
  322. // 禁止出现没必要的字符串连接
  323. 'no-useless-concat':'error',
  324. // 禁止出现没必要的转义
  325. // @off 转义可以使代码更易懂
  326. 'no-useless-escape':'off',
  327. // @fixable 禁止没必要的 return
  328. // @off 没必要限制 return
  329. 'no-useless-return':'off',
  330. // 禁止使用 void
  331. 'no-void':'error',
  332. // 禁止注释中出现 TODO 和 FIXME
  333. // @off TODO 很常用
  334. 'no-warning-comments':'off',
  335. // 禁止使用 with
  336. 'no-with':'error',
  337. // Promise 的 reject 中必须传入 Error 对象,而不是字面量
  338. 'prefer-promise-reject-errors':'error',
  339. // parseInt 必须传入第二个参数
  340. 'radix':'error',
  341. // async 函数中必须存在 await 语句
  342. 'require-await':'error',
  343. // var 必须在作用域的最前面
  344. // @off var 不在最前面也是很常见的用法
  345. 'vars-on-top':'off',
  346. // @fixable 立即执行的函数必须符合如下格式 (function () { alert('Hello') })()
  347. 'wrap-iife':[
  348. 'error',
  349. 'inside',
  350. {
  351. functionPrototypeMethods:true
  352. }
  353. ],
  354. // @fixable 必须使用 if (foo === 5) 而不是 if (5 === foo)
  355. 'yoda':[
  356. 'error',
  357. 'never',
  358. {
  359. onlyEquality:true
  360. }
  361. ],
  362.  
  363. //
  364. //
  365. // 严格模式
  366. // 这些规则与严格模式指令有关
  367. //
  368. // @fixable 禁止使用 'strict';
  369. 'strict':[
  370. 'error',
  371. 'never'
  372. ],
  373.  
  374. //
  375. //
  376. // 变量
  377. // 这些规则与变量申明有关
  378. //
  379. // 变量必须在定义的时候赋值
  380. // @off 先定义后赋值很常见
  381. 'init-declarations':'off',
  382. // 禁止 catch 的参数名与定义过的变量重复
  383. // @off 太严格了
  384. 'no-catch-shadow':'off',
  385. // 禁止使用 delete
  386. 'no-delete-var':'error',
  387. // 禁止 label 名称与定义过的变量重复
  388. 'no-label-var':'error',
  389. // 禁止使用指定的全局变量
  390. // @off 它用于限制某个具体的变量名不能使用
  391. 'no-restricted-globals':'off',
  392. // 禁止变量名与上层作用域内的定义过的变量重复
  393. 'no-shadow':[
  394. 'error',
  395. {
  396. builtinGlobals:false,
  397. hoist:'functions',
  398. allow:[
  399. 'resolve',
  400. 'reject',
  401. 'done',
  402. 'cb',
  403. 'callback',
  404. 'error',
  405. 'err',
  406. 'e'
  407. ]
  408. }
  409. ],
  410. // 禁止使用保留字作为变量名
  411. 'no-shadow-restricted-names':'error',
  412. // 禁止使用未定义的变量
  413. 'no-undef':[
  414. 'error',
  415. {
  416. typeof:false
  417. }
  418. ],
  419. // @fixable 禁止将 undefined 赋值给变量
  420. 'no-undef-init':'error',
  421. // 禁止对 undefined 重新赋值
  422. 'no-undefined':'error',
  423. // 定义过的变量必须使用
  424. 'no-unused-vars':[
  425. 'error',
  426. {
  427. vars:'all',
  428. args:'none',
  429. caughtErrors:'none'
  430. }
  431. ],
  432. // 变量必须先定义后使用
  433. 'no-use-before-define':[
  434. 'error',
  435. {
  436. functions:false,
  437. classes:false,
  438. variables:false
  439. }
  440. ],
  441.  
  442. //
  443. //
  444. // Node.js 和 CommonJS
  445. // 这些规则与在 Node.js 中运行的代码或浏览器中使用的 CommonJS 有关
  446. //
  447. // callback 之后必须立即 return
  448. // @off Limitations 太多了
  449. 'callback-return':'off',
  450. // require 必须在全局作用域下
  451. // @off 条件加载很常见
  452. 'global-require':'off',
  453. // callback 中的 error 必须被处理
  454. 'handle-callback-err':'error',
  455. // 禁止直接使用 Buffer
  456. 'no-buffer-constructor':'error',
  457. // 相同类型的 require 必须放在一起
  458. // @off 太严格了
  459. 'no-mixed-requires':'off',
  460. // 禁止直接 new require('foo')
  461. 'no-new-require':'error',
  462. // 禁止对 __dirname 或 __filename 使用字符串连接
  463. 'no-path-concat':'error',
  464. // 禁止使用 process.env.NODE_ENV
  465. // @off 使用很常见
  466. 'no-process-env':'off',
  467. // 禁止使用 process.exit(0)
  468. // @off 使用很常见
  469. 'no-process-exit':'off',
  470. // 禁止使用指定的模块
  471. // @off 它用于限制某个具体的模块不能使用
  472. 'no-restricted-modules':'off',
  473. // 禁止使用 node 中的同步的方法,比如 fs.readFileSync
  474. // @off 使用很常见
  475. 'no-sync':'off',
  476.  
  477. //
  478. //
  479. // 风格问题
  480. // 这些规则与代码风格有关,所以是非常主观的
  481. //
  482. // @fixable 配置数组的中括号内前后的换行格式
  483. // @off 配置项无法配制成想要的样子
  484. 'array-bracket-newline':'off',
  485. // @fixable 数组的括号内的前后禁止有空格
  486. 'array-bracket-spacing':[
  487. 'error',
  488. 'never'
  489. ],
  490. // @fixable 配置数组的元素之间的换行格式
  491. // @off 允许一行包含多个元素,方便大数量的数组的书写
  492. 'array-element-newline':'off',
  493. // @fixable 代码块如果在一行内,那么大括号内的首尾必须有空格,比如 function () { alert('Hello') }
  494. 'block-spacing':[
  495. 'error',
  496. 'always'
  497. ],
  498. // @fixable if 与 else 的大括号风格必须一致
  499. // @off else 代码块可能前面需要有一行注释
  500. 'brace-style':'off',
  501. // 变量名必须是 camelcase 风格的
  502. // @off 很多 api 或文件名都不是 camelcase
  503. 'camelcase':'off',
  504. // @fixable 注释的首字母必须大写
  505. // @off 没必要限制
  506. 'capitalized-comments':'off',
  507. // @fixable 对象的最后一个属性末尾必须有逗号
  508. // @off 没必要限制
  509. 'comma-dangle':'off',
  510. // @fixable 逗号前禁止有空格,逗号后必须要有空格
  511. 'comma-spacing':[
  512. 'error',
  513. {
  514. 'before':false,
  515. 'after':true
  516. }
  517. ],
  518. // @fixable 禁止在行首写逗号
  519. 'comma-style':[
  520. 'error',
  521. 'last'
  522. ],
  523. // @fixable 用作对象的计算属性时,中括号内的首尾禁止有空格
  524. 'computed-property-spacing':[
  525. 'error',
  526. 'never'
  527. ],
  528. // 限制 this 的别名
  529. // @off 没必要限制
  530. 'consistent-this':'off',
  531. // @fixable 文件最后一行必须有一个空行
  532. // @off 没必要限制
  533. 'eol-last':'off',
  534. // @fixable 函数名和执行它的括号之间禁止有空格
  535. 'func-call-spacing':[
  536. 'error',
  537. 'never'
  538. ],
  539. // 函数赋值给变量的时候,函数名必须与变量名一致
  540. 'func-name-matching':[
  541. 'error',
  542. 'always',
  543. {
  544. includeCommonJSModuleExports:false
  545. }
  546. ],
  547. // 函数必须有名字
  548. // @off 没必要限制
  549. 'func-names':'off',
  550. // 必须只使用函数申明或只使用函数表达式
  551. // @off 没必要限制
  552. 'func-style':'off',
  553. // 禁止使用指定的标识符
  554. // @off 它用于限制某个具体的标识符不能使用
  555. 'id-blacklist':'off',
  556. // 限制变量名长度
  557. // @off 没必要限制变量名长度
  558. 'id-length':'off',
  559. // 限制变量名必须匹配指定的正则表达式
  560. // @off 没必要限制变量名
  561. 'id-match':'off',
  562. // @fixable 一个缩进必须用四个空格替代
  563. 'indent':[
  564. 'error',
  565. 4,
  566. {
  567. SwitchCase:1,
  568. flatTernaryExpressions:true
  569. }
  570. ],
  571. // @fixable jsx 中的属性必须用双引号
  572. 'jsx-quotes':[
  573. 'error',
  574. 'prefer-double'
  575. ],
  576. // @fixable 对象字面量中冒号前面禁止有空格,后面必须有空格
  577. 'key-spacing':[
  578. 'error',
  579. {
  580. beforeColon:false,
  581. afterColon:true,
  582. mode:'strict',
  583. }
  584. ],
  585. // @fixable 关键字前后必须有空格
  586. 'keyword-spacing':[
  587. 'error',
  588. {
  589. before:true,
  590. after:true
  591. }
  592. ],
  593. // 单行注释必须写在上一行
  594. // @off 没必要限制
  595. 'line-comment-position':'off',
  596. // @fixable 限制换行符为 LF 或 CRLF
  597. // @off 没必要限制
  598. 'linebreak-style':'off',
  599. // @fixable 注释前后必须有空行
  600. // @off 没必要限制
  601. 'lines-around-comment':'off',
  602. // 代码块嵌套的深度禁止超过 5 层
  603. 'max-depth':[
  604. 'error',
  605. 5
  606. ],
  607. // 限制一行的长度
  608. // @off 现在编辑器已经很智能了,不需要限制一行的长度
  609. 'max-len':'off',
  610. // 限制一个文件最多的行数
  611. // @off 没必要限制
  612. 'max-lines':'off',
  613. // 回调函数嵌套禁止超过 3 层,多了请用 async await 替代
  614. 'max-nested-callbacks':[
  615. 'error',
  616. 3
  617. ],
  618. // 函数的参数禁止超过 7 个
  619. 'max-params':[
  620. 'error',
  621. 7
  622. ],
  623. // 限制函数块中的语句数量
  624. // @off 没必要限制
  625. 'max-statements':'off',
  626. // 限制一行中的语句数量
  627. // @off 没必要限制
  628. 'max-statements-per-line':'off',
  629. // 三元表达式必须得换行
  630. // @off 三元表达式可以随意使用
  631. 'multiline-ternary':'off',
  632. // new 后面的类名必须首字母大写
  633. 'new-cap':[
  634. 'error',
  635. {
  636. newIsCap:true,
  637. capIsNew:false,
  638. properties:true
  639. }
  640. ],
  641. // @fixable new 后面的类必须有小括号
  642. 'new-parens':'error',
  643. // 链式调用必须换行
  644. // @off 没必要限制
  645. 'newline-per-chained-call':'off',
  646. // 禁止使用 Array 构造函数
  647. 'no-array-constructor':'error',
  648. // 禁止使用位运算
  649. // @off 位运算很常见
  650. 'no-bitwise':'off',
  651. // 禁止使用 continue
  652. // @off continue 很常用
  653. 'no-continue':'off',
  654. // 禁止在代码后添加内联注释
  655. // @off 内联注释很常用
  656. 'no-inline-comments':'off',
  657. // @fixable 禁止 else 中只有一个单独的 if
  658. // @off 单独的 if 可以把逻辑表达的更清楚
  659. 'no-lonely-if':'off',
  660. // 禁止混用不同的操作符,比如 let foo = a && b < 0 || c > 0 || d + 1 === 0
  661. // @off 太严格了,可以由使用者自己去判断如何混用操作符
  662. 'no-mixed-operators':'off',
  663. // 禁止混用空格和缩进
  664. 'no-mixed-spaces-and-tabs':'error',
  665. // 禁止连续赋值,比如 a = b = c = 5
  666. // @off 没必要限制
  667. 'no-multi-assign':'off',
  668. // @fixable 禁止出现超过三行的连续空行
  669. 'no-multiple-empty-lines':[
  670. 'error',
  671. {
  672. max:3,
  673. maxEOF:1,
  674. maxBOF:1
  675. }
  676. ],
  677. // 禁止 if 里面有否定的表达式,比如:
  678. // if (a !== b) {
  679. // doSomething();
  680. // } else {
  681. // doSomethingElse();
  682. // }
  683. // @off 否定的表达式可以把逻辑表达的更清楚
  684. 'no-negated-condition':'off',
  685. // 禁止使用嵌套的三元表达式,比如 a ? b : c ? d : e
  686. // @off 没必要限制
  687. 'no-nested-ternary':'off',
  688. // 禁止直接 new Object
  689. 'no-new-object':'error',
  690. // 禁止使用 ++ 或 --
  691. // @off 没必要限制
  692. 'no-plusplus':'off',
  693. // 禁止使用特定的语法
  694. // @off 它用于限制某个具体的语法不能使用
  695. 'no-restricted-syntax':'off',
  696. // 禁止使用 tabs
  697. 'no-tabs':'error',
  698. // 禁止使用三元表达式
  699. // @off 三元表达式很常用
  700. 'no-ternary':'off',
  701. // @fixable 禁止行尾有空格
  702. 'no-trailing-spaces':'error',
  703. // 禁止变量名出现下划线
  704. // @off 下划线在变量名中很常用
  705. 'no-underscore-dangle':'off',
  706. // @fixable 必须使用 !a 替代 a ? false : true
  707. // @off 后者表达的更清晰
  708. 'no-unneeded-ternary':'off',
  709. // @fixable 禁止属性前有空格,比如 foo. bar()
  710. 'no-whitespace-before-property':'error',
  711. // @fixable 禁止 if 后面不加大括号而写两行代码
  712. 'nonblock-statement-body-position':[
  713. 'error',
  714. 'beside',
  715. {
  716. overrides:{
  717. while:'below'
  718. }
  719. }
  720. ],
  721. // @fixable 大括号内的首尾必须有换行
  722. 'object-curly-newline':[
  723. 'error',
  724. {
  725. multiline:true,
  726. consistent:true
  727. }
  728. ],
  729. // @fixable 对象字面量只有一行时,大括号内的首尾必须有空格
  730. 'object-curly-spacing':[
  731. 'error',
  732. 'always',
  733. {
  734. arraysInObjects:true,
  735. objectsInObjects:false
  736. }
  737. ],
  738. // @fixable 对象字面量内的属性每行必须只有一个
  739. // @off 没必要限制
  740. 'object-property-newline':'off',
  741. // 禁止变量申明时用逗号一次申明多个
  742. 'one-var':[
  743. 'error',
  744. 'never'
  745. ],
  746. // @fixable 变量申明必须每行一个
  747. 'one-var-declaration-per-line':[
  748. 'error',
  749. 'always'
  750. ],
  751. // @fixable 必须使用 x = x + y 而不是 x += y
  752. // @off 没必要限制
  753. 'operator-assignment':'off',
  754. // @fixable 需要换行的时候,操作符必须放在行末,比如:
  755. // let foo = 1 +
  756.  
  757. // @off 有时放在第二行开始处更易读
  758. 'operator-linebreak':'off',
  759. // @fixable 代码块首尾必须要空行
  760. // @off 没必要限制
  761. 'padded-blocks':'off',
  762. // @fixable 限制语句之间的空行规则,比如变量定义完之后必须要空行
  763. // @off 没必要限制
  764. 'padding-line-between-statements':'off',
  765. // @fixable 对象字面量的键名禁止用引号括起来
  766. // @off 没必要限制
  767. 'quote-props':'off',
  768. // @fixable 必须使用单引号,禁止使用双引号
  769. 'quotes':[
  770. 'error',
  771. 'single',
  772. {
  773. avoidEscape:true,
  774. allowTemplateLiterals:true
  775. }
  776. ],
  777. // 必须使用 jsdoc 风格的注释
  778. // @off 太严格了
  779. 'require-jsdoc':'off',
  780. // @fixable 结尾必须有分号
  781. 'semi':[
  782. 'error',
  783. 'always',
  784. {
  785. omitLastInOneLineBlock:true
  786. }
  787. ],
  788. // @fixable 一行有多个语句时,分号前面禁止有空格,分号后面必须有空格
  789. 'semi-spacing':[
  790. 'error',
  791. {
  792. before:false,
  793. after:true
  794. }
  795. ],
  796. // @fixable 分号必须写在行尾,禁止在行首出现
  797. 'semi-style':[
  798. 'error',
  799. 'last'
  800. ],
  801. // 对象字面量的键名必须排好序
  802. // @off 没必要限制
  803. 'sort-keys':'off',
  804. // 变量申明必须排好序
  805. // @off 没必要限制
  806. 'sort-vars':'off',
  807. // @fixable if, function 等的大括号之前必须要有空格,比如 if (a) {
  808. 'space-before-blocks':[
  809. 'error',
  810. 'always'
  811. ],
  812. // @fixable function 的小括号之前必须要有空格
  813. 'space-before-function-paren':[
  814. 'error',
  815. {
  816. anonymous:'always',
  817. named:'never',
  818. asyncArrow:'always'
  819. }
  820. ],
  821. // @fixable 小括号内的首尾禁止有空格
  822. 'space-in-parens':[
  823. 'error',
  824. 'never'
  825. ],
  826. // @fixable 操作符左右必须有空格,比如 let sum = 1 + 2;
  827. 'space-infix-ops':'error',
  828. // @fixable new, typeof 等后面必须有空格,++, -- 等禁止有空格,比如:
  829. // let foo = new Person();
  830. // bar = bar++;
  831. 'space-unary-ops':[
  832. 'error',
  833. {
  834. words:true,
  835. nonwords:false
  836. }
  837. ],
  838. // @fixable 注释前后必须有空格
  839. 'spaced-comment':[
  840. 'error',
  841. 'always',
  842. {
  843. block:{
  844. exceptions:[
  845. '*'
  846. ],
  847. balanced:true
  848. }
  849. }
  850. ],
  851. // @fixable case 的冒号前禁止有空格,冒号后必须有空格
  852. 'switch-colon-spacing':[
  853. 'error',
  854. {
  855. after:true,
  856. before:false
  857. }
  858. ],
  859. // @fixable 模版字符串的 tag 之后禁止有空格,比如 tag`Hello World`
  860. 'template-tag-spacing':[
  861. 'error',
  862. 'never'
  863. ],
  864. // @fixable 文件开头禁止有 BOM
  865. 'unicode-bom':[
  866. 'error',
  867. 'never'
  868. ],
  869. // @fixable 正则表达式必须有括号包起来
  870. // @off 没必要限制
  871. 'wrap-regex':'off',
  872.  
  873. //
  874. //
  875. // ECMAScript 6
  876. // 这些规则与 ES6(即通常所说的 ES2015)有关
  877. //
  878. // @fixable 箭头函数能够省略 return 的时候,必须省略,比如必须写成 () => 0,禁止写成 () => { return 0 }
  879. // @off 箭头函数的返回值,应该允许灵活设置
  880. 'arrow-body-style':'off',
  881. // @fixable 箭头函数只有一个参数的时候,必须加括号
  882. // @off 应该允许灵活设置
  883. 'arrow-parens':'off',
  884. // @fixable 箭头函数的箭头前后必须有空格
  885. 'arrow-spacing':[
  886. 'error',
  887. {
  888. before:true,
  889. after:true
  890. }
  891. ],
  892. // constructor 中必须有 super
  893. 'constructor-super':'error',
  894. // @fixable generator 的 * 前面禁止有空格,后面必须有空格
  895. 'generator-star-spacing':[
  896. 'error',
  897. {
  898. before:false,
  899. after:true
  900. }
  901. ],
  902. // 禁止对定义过的 class 重新赋值
  903. 'no-class-assign':'error',
  904. // @fixable 禁止出现难以理解的箭头函数,比如 let x = a => 1 ? 2 : 3
  905. 'no-confusing-arrow':'error',
  906. // 禁止对使用 const 定义的常量重新赋值
  907. 'no-const-assign':'error',
  908. // 禁止重复定义类
  909. 'no-dupe-class-members':'error',
  910. // 禁止重复 import 模块
  911. 'no-duplicate-imports':'error',
  912. // 禁止使用 new 来生成 Symbol
  913. 'no-new-symbol':'error',
  914. // 禁止 import 指定的模块
  915. // @off 它用于限制某个具体的模块不能使用
  916. 'no-restricted-imports':'off',
  917. // 禁止在 super 被调用之前使用 this 或 super
  918. 'no-this-before-super':'error',
  919. // @fixable 禁止出现没必要的计算键名,比如 let a = { ['0']: 0 };
  920. 'no-useless-computed-key':'error',
  921. // 禁止出现没必要的 constructor,比如 constructor(value) { super(value) }
  922. 'no-useless-constructor':'error',
  923. // @fixable 禁止解构时出现同样名字的的重命名,比如 let { foo: foo } = bar;
  924. 'no-useless-rename':'error',
  925. // @fixable 禁止出现 var
  926. 'no-var':'error',
  927. // @fixable 必须使用 a = {b} 而不是 a = {b: b}
  928. // @off 没必要强制要求
  929. 'object-shorthand':'off',
  930. // @fixable 必须使用箭头函数作为回调
  931. // @off 没必要强制要求
  932. 'prefer-arrow-callback':'off',
  933. // @fixable 申明后不再被修改的变量必须使用 const 来申明
  934. // @off 没必要强制要求
  935. 'prefer-const':'off',
  936. // 必须使用解构
  937. // @off 没必要强制要求
  938. 'prefer-destructuring':'off',
  939. // @fixable 必须使用 0b11111011 而不是 parseInt('111110111', 2)
  940. // @off 没必要强制要求
  941. 'prefer-numeric-literals':'off',
  942. // 必须使用 ...args 而不是 arguments
  943. // @off 没必要强制要求
  944. 'prefer-rest-params':'off',
  945. // @fixable 必须使用 ... 而不是 apply,比如 foo(...args)
  946. // @off apply 很常用
  947. 'prefer-spread':'off',
  948. // @fixable 必须使用模版字面量而不是字符串连接
  949. // @off 字符串连接很常用
  950. 'prefer-template':'off',
  951. // generator 函数内必须有 yield
  952. 'require-yield':'error',
  953. // @fixable ... 的后面禁止有空格
  954. 'rest-spread-spacing':[
  955. 'error',
  956. 'never'
  957. ],
  958. // @fixable import 必须按规则排序
  959. // @off 没必要强制要求
  960. 'sort-imports':'off',
  961. // 创建 Symbol 时必须传入参数
  962. 'symbol-description':'error',
  963. // @fixable ${name} 内的首尾禁止有空格
  964. 'template-curly-spacing':[
  965. 'error',
  966. 'never'
  967. ],
  968. // @fixable yield* 后面必须要有空格
  969. 'yield-star-spacing':[
  970. 'error',
  971. 'after'
  972. ]
  973. }
  974. };

猜你喜欢

转载自www.cnblogs.com/ladybug7/p/12526585.html