{
    "env": {
        "browser": true,
        "amd": true,
        "es6": true
    },
    "globals": {
        "define": true,
        "$": true,
        "console": true
    },
    "parserOptions": {
        "sourceType": "module",
        "ecmaVersion": 8
    },
    "parser": "babel-eslint",
    "extends": [
        "eslint:recommended"
    ],
    "rules": {
        "no-console": 1,
        //if, while等条件中不允许使用“=”
        "no-cond-assign": [2, "always"],
        // 禁止在条件中使用常量表达式
        // if (false) {
        // doSomethingUnfinished();
        // } //cuowu
        "no-constant-condition": 2,
        // 程序中不能出现debugger
        "no-debugger": 2,
        // 函数的参数名称不能重复
        "no-dupe-args": 2,
        // 对象的属性名称不能重复
        "no-dupe-keys": 2,
        // switch的case不能重复
        "no-duplicate-case": 2,
        // 禁止把全局对象 (Math 和 JSON) 作为函数调用 错误：var math = Math();
        "no-obj-calls": 2,
        // 禁止正则表达式字面量中出现多个空格
        "no-regex-spaces": 2,
        "no-control-regex": 0,
        // 禁用稀疏数组
        "no-sparse-arrays": 2,
        // 禁止出现令人困惑的多行表达式
        "no-unexpected-multiline": 2,
        // 禁止在return、throw、continue 和 break语句之后出现不可达代码
        "no-unreachable": 2,
        // 要求使用 isNaN() 检查 NaN
        "use-isnan": 2,
        // 强制 typeof 表达式与有效的字符串进行比较
        // typeof foo === "undefined" 错误
        "valid-typeof": 2,
        // 使用 === 替代 == allow-null允许null和undefined==
        // 禁用 arguments.caller 或 arguments.callee
        "no-caller": 2,
        // 禁止在没有类型检查操作符的情况下与 null 进行比较
        "no-eq-null": 1,
        // 禁用 eval()
        "no-eval": 2,
        // 禁止扩展原生类型
        "no-extend-native": 0,
        // 禁止不必要的 .bind() 调用
        "no-extra-bind": 2,
        //禁止不必要的bool转换
        "no-extra-boolean-cast": 2,
        //禁止多余的冒号
        "no-extra-semi": 2,
        //禁止switch穿透
        "no-fallthrough": 1,
        //禁止省略浮点数中的0 .5 3.
        "no-floating-decimal": 2,
        //禁止重复的函数声明
        "no-func-assign": 2,
        // 禁用不必要的标签
        "no-extra-label": 2,
        // 禁止使用 var 多次声明同一变量
        "no-redeclare": 2,
        // 禁用未声明的变量，除非它们在 /*global */ 注释中被提到
        "no-undef": 2,
        // 禁止出现未使用过的变量
        "no-unused-vars": 1,
        // 不允许在变量定义之前使用它们
        "no-use-before-define": 0,
        // 数组和对象键值对最后一个逗号， never参数：不能带末尾的逗号, always参数：必须带末尾的逗号，
        // always-multiline：多行模式必须带逗号，单行模式不能带逗号
        "comma-dangle": [1, "never"],
        // 禁止修改 const 声明的变量
        "no-const-assign": 2,
        // 禁止类成员中出现重复的名称
        "no-dupe-class-members": 2,
        // 禁止 if 作为唯一的语句出现在 else 语句中
        "no-lonely-if": 1,
        // 禁止 if 语句中有 return 之后有 else
        "no-else-return": 1,
        "array-bracket-spacing": [2, "never"],
        // 禁止或强制在单行代码块中使用空格(禁用)
        "block-spacing": [1, "never"],
        // 强制使用一致的缩进 第二个参数为 "tab" 时，会使用tab
        // 为数值，表示缩进空格数
        "indent": [2, 4, {
            "SwitchCase": 1
        }],
        // if while function 后面的{必须与if在同一行，java风格。
        "brace-style": [2, "1tbs", {
            "allowSingleLine": true
        }],
        // 双峰驼命名格式
        "camelcase": 2,
        // 控制逗号前后的空格
        "comma-spacing": [2, {
            "before": false,
            "after": true
        }],
        // 控制逗号在行尾出现还是在行首出现 (默认行尾)
        // http://eslint.org/docs/rules/comma-style
        "comma-style": [2, "last"],
        //"SwitchCase" (默认：0) 强制 switch 语句中的 case 子句的缩进水平
        // 以方括号取对象属性时，[ 后面和 ] 前面是否需要空格, 可选参数 never, always
        "computed-property-spacing": [2, "never"],
        // 强制使用命名的 function 表达式
        "func-names": 0,
        // 文件末尾强制换行
        "eol-last": 2,
        // 强制在对象字面量的属性中键和值之间使用一致的间距
        "key-spacing": [2, {
            "beforeColon": false,
            "afterColon": true
        }],
        // 强制使用一致的换行风格
        "linebreak-style": [1, "unix"],
        // 要求在注释周围有空行 ( 要求在块级注释之前有一空行)
        "lines-around-comment": [1, {
            "beforeBlockComment": true
        }],

        // 要求构造函数首字母大写 （要求调用 new 操作符时有首字母大小的函数，允许调用首字母大写的函数时没有 new 操作符。）
        "new-cap": [2, {
            "newIsCap": true,
            "capIsNew": false
        }],
        // 要求调用无参构造函数时有圆括号
        "new-parens": 2,

        // 禁止使用 Array 构造函数
        "no-array-constructor": 2,
        // 禁用按位运算符
        "no-bitwise": 2,
        // 要求 return 语句之前有一空行
        // "newline-before-return": 1,
        // 禁止在代码行后使用内联注释
        "no-inline-comments": 1,

        // 禁止混合使用不同的操作符
        "no-mixed-operators": 0,
        // 不允许空格和 tab 混合缩进
        "no-mixed-spaces-and-tabs": 2,
        // 不允许多个空行
        "no-multiple-empty-lines": [2, {
            "max": 2
        }],

        // 不允许使用嵌套的三元表达式
        "no-nested-ternary": 2,
        // 禁止使用 Object 的构造函数
        "no-new-object": 2,
        // 禁止使用特定的语法
        "no-restricted-syntax": 0,
        // 禁止 function 标识符和括号之间出现空格
        "no-spaced-func": 2,
        // 禁用行尾空格
        "no-trailing-spaces": 2,
        // 禁止可以在有更简单的可替代的表达式时使用三元操作符
        "no-unneeded-ternary": 2,
        // 禁止属性前有空白
        "no-whitespace-before-property": 0,
        // 强制在花括号中使用一致的空格
        "object-curly-spacing": 2,
        // 强制将对象的属性放在不同的行上
        "object-property-newline": 2,
        // 强制函数中的变量要么一起声明要么分开声明
        "one-var": [2, {
            "initialized": "never"
        }],
        // 要求或禁止在 var 声明周围换行
        "one-var-declaration-per-line": 1,
        // 强制操作符使用一致的换行符
        "operator-linebreak": [2, "after", {
            "overrides": {
                "?": "before",
                ":": "before"
            }
        }],
        // 强制使用一致的反勾号、双引号或单引号
        "quotes": [2, "single", "avoid-escape"],
        // 要求使用 JSDoc 注释
        "require-jsdoc": 1,
        // 要求或禁止使用分号而不是 ASI（这个才是控制行尾部分号的，）
        "semi": [2, "always"],
        // 强制分号之前和之后使用一致的空格
        "semi-spacing": 2,
        // 强制在块之前使用一致的空格
        "space-before-blocks": [2, "always"],
        // 强制在 function的左括号之前使用一致的空格
        "space-before-function-paren": [2, "always"],
        // 强制在圆括号内使用一致的空格
        "space-in-parens": [2, "never"],
        // 要求操作符周围有空格
        "space-infix-ops": 1,
        "keyword-spacing": 1,
        // 强制在一元操作符前后使用一致的空格
        "space-unary-ops": [2, {
            "words": true,
            "nonwords": false
        }]
    }
}