TSLint规范

399 阅读11分钟

通用ESLint规范

module.exports = {
  parserOptions: {
    // 解析器选项
    parser: "babel-eslint",
    /**
     * 指定你想要支持的 JavaScript 语言选项、可以使用 6、7、8、9 或 10 来指定你想要使用的 ECMAScript 版本
     * 你也可以用使用年份命名的版本号指定为 2015(同 6),2016(同 7),或 2017(同 8)或 2018(同 9)或 2019 (same as 10)
     */
    ecmaVersion: 2020,
    // 设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。
    sourceType: "module",
    /**
     * EcmaFeatures是个对象,表示你想使用的额外的语言特性
     *  globalReturn - 允许在全局作用域下使用 return 语句
     *  impliedStrict - 启用全局 strict mode (如果 ecmaVersion 是 5 或更高)
     *  jsx - 启用 JSX
     */
    ecmaFeatures: {
      jsx: true,
    },
  },
  env: {
    // 指定环境
    node: true, // Node.js 全局变量和 Node.js 作用域
    browser: true, // 浏览器环境中的全局变量,
    es6: true, //
  },
  globals: {
    // 在一个源文件里使用全局变量,按照项目需求自定义
    document: "readonly",
    navigator: "readonly",
    window: "readonly",
  },
  plugins: ["prettier"], // 引入第三方规则,可以省略包名的前缀 eslint-plugin-
  extends: ["plugin:prettier/recommended"], // 引入最佳规则设置,// 可以省略包名的前缀 eslint-config-
  rule: {
    //  "off" or 0 - 关闭规则
    //  "warn" or 1 - 将规则视为一个警告(不会影响退出码)
    //  "error" or 2 - 将规则视为一个错误 (退出码为1)
    /**
     * prettier代码格式配置
     */
    "prettier/prettier": [
      "error",
      {
        semi: true,
        printWidth: 80,
        tabWidth: 2,
        singleQuote: true,
        bracketSpacing: true,
        useTabs: false,
        arrowParens: "always",
        jsxSingleQuote: true,
        trailingComma: "all",
      },
    ],
    /**
     * 必须使用 === 或 !==,禁止使用 == 或 !=
     */
    eqeqeq: "error",
    /**
     * 变量名必须是 camelCase 风格的
     */
    camelcase: [
      "error",
      {
        allow: ["^UNSAFE_"],
        properties: "never",
        ignoreGlobals: true,
      },
    ],
    /**
     * 首行缩进2个字符
     */
    indent: [
      "error",
      2,
      {
        SwitchCase: 1,
      },
    ],
    /**
     * 禁止使用 var
     */
    "no-var": "error",
    /**
     * 禁止使用 console
     */
    "no-console": "error",
    /**
     * 变量必须先定义后使用
     */
    "no-use-before-define": "off",
    /**
     * 已定义的变量必须使用
     */
    "no-unused-vars": [
      "error",
      {
        vars: "all",
        args: "none",
        ignoreRestSiblings: true,
        caughtErrors: "none",
      },
    ],
    /**
     * 在类的非静态方法中,必须存在对 this 的引用
     */
    "class-methods-use-this": "off",
    /**
     * 要求使用剩余参数而不是 arguments
     */
    "prefer-rest-params": "off",
    /**
     * 箭头函数体必须由大括号包裹
     */
    "arrow-body-style": "off",
    /**
     * 禁止使用 alert
     */
    "no-alert": "error",
    /**
     * 禁止使用 new 以避免产生副作用
     */
    "no-new": "error",
    /**
     * 要求末尾逗号
     */
    "comma-dangle": "off",
    /**
     * 强制在 parseInt() 使用基数参数
     */
    radix: "error",
    /**
     * 禁止出现多行空行
     */
    "no-multiple-empty-lines": "error",
    /**
     * 对象文字的大括号内执行一致的间距,解构赋值和导入/导出说明符
     */
    "object-curly-spacing": ["error", "always"],
    /**
     * 在“function”定义的左括号前强制使用一致的间距
     */
    "space-before-function-paren": "error",
    /**
     * 强制在圆括号内使用一致的空格
     */
    "space-in-parens": "error",
    /**
     * 需要在中缀运算符周围留出空格
     */
    "space-infix-ops": ["error", { int32Hint: false }],
    /**
     * 强制使用反撇号、双引号或单引号
     */
    quotes: ["error", "single"],
    /**
     * 禁止将自己与自己比较
     */
    "no-self-compare": "error",
    /**
     * 代码块嵌套的深度禁止超过 4 层
     */
    "max-depth": ["error", 4],
    /**
     * 回调函数嵌套禁止超过 4 层,多了请用 async await 替代
     */
    "max-nested-callbacks": ["error", 4],
    /**
     * 函数的参数禁止超过 6 个
     */
    "max-params": ["error", 6],
    /**
     * 限制函数块中的语句数量
     */
    "max-statements": ["error", 50],
    /**
     * 限制一行中的语句数量
     */
    "max-statements-per-line": "error",
    /**
     * 不强制一行的最大长度
     */
    "max-len": ["error", 120],
    /**
     * 禁止在三元操作数中间换行
     */
    "multiline-ternary": "off",
    /**
     * 强制数组方法的回调函数中有return语句
     */
    "callback-return": "error",
    /**
     * 要求回调函数中有容错处理
     */
    "handle-callback-err": "error",
    /**
     * 禁止 if 作为唯一的语句出现在 else 语句中
     */
    "no-lonely-if": "error",
    /**
     * 禁用行尾空格
     */
    "no-trailing-spaces": "error",
    /**
     * 禁止属性前有空白
     */
    "no-whitespace-before-property": "error",
    /**
     * 禁止在普通字符串中出现模版字符串里的变量形式
     */
    "no-template-curly-in-string": "error",
    /**
     * switch 语句必须有 default
     */
    "default-case": "error",
    /**
     * 禁止重复导入模块
     */
    "no-duplicate-imports": "error",
    /**
     * async 函数中必须存在 await 语句
     */
    "require-await": "error",
    /**
     * constructor 中必须有 super
     */
    "constructor-super": "error",
    /**
     * 注释的斜线或 * 后必须有空格
     */
    "spaced-comment": [
      "error",
      "always",
      {
        block: {
          exceptions: ["*"],
          balanced: true,
        },
      },
    ],

    /******  可能的错误或逻辑错误 *********/
    "for-direction": "error", // 强制 “for” 循环中更新子句的计数器朝着正确的方向移动
    "getter-return": "error", // 强制 getter 函数中出现 return 语句
    "no-async-promise-executor": "error", // 禁止使用异步函数作为 Promise executor
    "no-await-in-loop": "error", // 禁止在循环中出现 await
    "no-compare-neg-zero": "error", // 禁止与 -0 进行比较
    "no-cond-assign": "error", // 禁止条件表达式中出现赋值操作符
    "no-constant-condition": "error", // 禁止在条件中使用常量表达式
    "no-debugger": "error", // 是否禁用 debugger
    "no-dupe-args": "error", // 禁止 function 定义中出现重名参数
    "no-dupe-keys": "error", // 禁止对象字面量中出现重复的 key
    "no-duplicate-case": "error", // 禁止出现重复的 case 标签
    "no-empty": "error", // 禁止出现空语句块
    "no-empty-character-class": "error", // 禁止在正则表达式中使用空字符集
    "no-ex-assign": "error", // 禁止对 catch 子句的参数重新赋值
    "no-extra-boolean-cast": "error", // 禁止不必要的布尔转换
    "no-extra-parens": "error", // 禁止不必要的括号
    "no-extra-semi": "error", // 禁止不必要的分号
    "no-func-assign": "error", // 禁止对 function 声明重新赋值
    "no-inner-declarations": "error", // 禁止在嵌套的块中出现变量声明或 function 声明
    "no-invalid-regexp": "error", // 禁止 RegExp 构造函数中存在无效的正则表达式字符串
    "no-irregular-whitespace": "error", // 禁止不规则的空白
    "no-misleading-character-class": "error", // 不允许在字符类语法中出现由多个代码点组成的字符
    "no-obj-calls": "error", // 禁止把全局对象作为函数调用
    "no-prototype-builtins": "error", // 禁止直接调用 Object.prototypes 的内置属性
    "no-regex-spaces": "error", // 禁止正则表达式字面量中出现多个空格
    "no-sparse-arrays": "error", // 禁用稀疏数组
    "no-unexpected-multiline": "error", // 禁止出现令人困惑的多行表达式
    "no-unreachable": "error", // 禁止在 return、throw、continue 和 break 语句之后出现不可达代码
    "no-unsafe-finally": "error", // 禁止在 finally 语句块中出现控制流语句
    "no-unsafe-negation": "error", // 禁止对关系运算符的左操作数使用否定操作符
    "require-atomic-updates": "error", // 禁止由于 await 或 yield的使用而可能导致出现竞态条件的赋值
    "use-isnan": "error", // 要求使用 isNaN() 检查 NaN
    "valid-typeof": "error", // 强制 typeof 表达式与有效的字符串进行比较

    /******  最佳实践  *********/
    "accessor-pairs": "error", // 强制 getter 和 setter 在对象中成对出现
    "array-callback-return": "error", // 强制数组方法的回调函数中有 return 语句
    "block-scoped-var": "error", // 强制把变量的使用限制在其定义的作用域范围内
    complexity: "error", // 指定程序中允许的最大环路复杂度
    "consistent-return": "error", // 要求 return 语句要么总是指定返回的值,要么不指定
    curly: "error", // 强制所有控制语句使用一致的括号风格
    "dot-location": "error", // 强制在点号之前和之后一致的换行
    "dot-notation": "error", // 强制尽可能地使用点号
    "guard-for-in": "error", // 要求 for-in 循环中有一个 if 语句
    "max-classes-per-file": "error", // 强制每个文件中包含的的类的最大数量
    "no-caller": "error", // 禁用 arguments.caller 或 arguments.callee
    "no-case-declarations": "error", // 不允许在 case 子句中使用词法声明
    "no-div-regex": "error", // 禁止除法操作符显式的出现在正则表达式开始的位置
    "no-else-return": "error", // 禁止 if 语句中 return 语句之后有 else 块
    "no-empty-function": "error", // 禁止出现空函数
    "no-empty-pattern": "error", // 禁止使用空解构模式
    "no-eq-null": "error", // 禁止在没有类型检查操作符的情况下与 null 进行比较
    "no-eval": "error", // 禁用 eval()
    "no-extend-native": "error", // 禁止扩展原生类型
    "no-extra-bind": "error", // 禁止不必要的 .bind() 调用
    "no-extra-label": "error", // 禁用不必要的标签
    "no-fallthrough": "error", // 禁止 case 语句落空
    "no-floating-decimal": "error", // 禁止数字字面量中使用前导和末尾小数点
    "no-global-assign": "error", // 禁止对原生对象或只读的全局对象进行赋值
    "no-implicit-coercion": "error", // 禁止使用短符号进行类型转换
    "no-implicit-globals": "error", // 禁止在全局范围内使用变量声明和 function 声明
    "no-implied-eval": "error", // 禁止使用类似 eval() 的方法
    "no-invalid-this": "error", // 禁止 this 关键字出现在类和类对象之外
    "no-iterator": "error", // 禁用 __iterator__ 属性
    "no-labels": "error", // 禁用标签语句
    "no-lone-blocks": "error", // 禁用不必要的嵌套块
    "no-loop-func": "error", // 禁止在循环语句中出现包含不安全引用的函数声明
    "no-magic-numbers": "error", // 禁用魔术数字
    "no-multi-spaces": "error", // 禁止使用多个空格
    "no-multi-str": "error", // 禁止使用多行字符串
    "no-new-func": "error", // 禁止对 Function 对象使用 new 操作符
    "no-new-wrappers": "error", // 禁止对 String,Number 和 Boolean 使用 new 操作符
    "no-octal": "error", // 禁用八进制字面量
    "no-octal-escape": "error", // 禁止在字符串中使用八进制转义序列
    "no-param-reassign": "error", // 禁止对 function 的参数进行重新赋值
    "no-proto": "error", // 禁用 __proto__ 属性
    "no-redeclare": "error", // 禁止多次声明同一变量
    "no-restricted-properties": "error", // 禁止使用对象的某些属性
    "no-return-assign": "error", // 禁止在 return 语句中使用赋值语句
    "no-return-await": "error", // 禁用不必要的 return await
    "no-script-url": "error", // 禁止使用 javascript: url
    "no-self-assign": "error", // 禁止自我赋值
    "no-sequences": "error", // 禁用逗号操作符
    "no-throw-literal": "error", // 禁止抛出异常字面量
    "no-unmodified-loop-condition": "error", // 禁用一成不变的循环条件
    "no-unused-expressions": "error", // 禁止出现未使用过的表达式
    "no-unused-labels": "error", // 禁用出现未使用过的标
    "no-useless-call": "error", // 禁止不必要的 .call() 和 .apply()
    "no-useless-catch": "error", // 禁止不必要的 catch 子句
    "no-useless-concat": "error", // 禁止不必要的字符串字面量或模板字面量的连接
    "no-useless-return": "error", // 禁止多余的 return 语句
    "no-void": "error", // 禁用 void 操作符
    "no-warning-comments": "error", // 禁止在注释中使用特定的警告术语
    "no-with": "error", // 禁用 with 语句
    "prefer-named-capture-group": "error", // 建议在正则表达式中使用命名捕获组
    "prefer-promise-reject-errors": "error", // 要求使用 Error 对象作为 Promise 拒绝的原因
    "require-unicode-regexp": "error", // 强制在 RegExp 上使用 u 标志
    "vars-on-top": "error", // 要求所有的 var 声明出现在它们所在的作用域顶部
    "wrap-iife": "error", // 要求 IIFE 使用括号括起来
    // 必须使用 if (foo === 5) 而不是 if (5 === foo)
    yoda: [
      "error",
      "never",
      {
        onlyEquality: true,
      },
    ],

    /******  变量声明  *********/
    "init-declarations": "error", // 要求或禁止var声明中的初始化
    "no-delete-var": "error", // 禁止删除变量
    "no-label-var": "error", // 不允许标签与变量同名
    "no-restricted-globals": "error", // 禁用特定的全局变量
    "no-shadow": "error", // 禁止变量声明与外层作用域的变量同名
    "no-shadow-restricted-names": "error", // 禁止将标识符定义为受限的名字
    "no-undef": "error", // 禁用未声明的变量,除非它们在/*global*/注释中被提到
    "no-undef-init": "error", // 禁止将变量初始化为undefined
    "no-undefined": "error", // 禁止将undefined作为标识符

    /******  ES6  *********/
    "arrow-parens": "error", // 要求箭头函数的参数使用圆括号
    "arrow-spacing": "error", // 强制箭头函数的箭头前后使用一致的空格
    "generator-star-spacing": "error", // 强制': 2, // generator': 2, // 函数中*号周围使用一致的空格
    "no-class-assign": "error", // 禁止修改类声明的变量
    "no-confusing-arrow": "error", // 禁止在可能与比较操作符相混淆的地方使用箭头函数
    "no-const-assign": "error", // 禁止修改const声明的变量
    "no-dupe-class-members": "error", // 禁止类成员中出现重复的名称
    "no-new-symbol": "error", // 禁止 Symbolnew 操作符和 new 一起使用
    "no-restricted-imports": "error", // 禁止使用指定的import加载的模块
    "no-this-before-super": "error", // 禁止在构造函数中,在调用super()之前使用this或super
    "no-useless-computed-key": "error", // 禁止在对象中使用不必要的计算属性
    "no-useless-constructor": "error", // 禁用不必要的构造函数
    "no-useless-rename": "error", // 禁止在 import 和 export 和解构赋值时将引用重命名为相同的名字\
    "object-shorthand": "error", // 要求或禁止对象字面量中方法和属性使用简写语法
    "prefer-arrow-callback": "error", // 要求回调函数使用箭头函数
    "prefer-const": "error", // 要求使用const声明那些声明后不再被修改的变量
    "prefer-destructuring": "error", // 优先使用数组和对象解构
    "prefer-numeric-literals": "error", // 禁用 parseInt() 和 Number.parseInt(),使用二进制,八进制和十六进制字面量
    "prefer-spread": "error", // 要求使用扩展运算符而非 .apply()
    "prefer-template": "error", // 要求使用模板字面量而非字符串连接
    "require-yield": "error", // 要求 generator 函数内有 yield
    "rest-spread-spacing": "error", // 强制剩余和扩展运算符及其表达式之间有空格
    "sort-imports": "error", // 强制模块内的 import 排序
    "symbol-description": "error", // 要求 symbol 描述
    "template-curly-spacing": "error", // 要求或禁止模板字符串中的嵌入表达式周围空格的使用
    "yield-star-spacing": "error", // 强制在 yield* 表达式中 * 周围使用空格

    /******  Node.js 或 CommonJS  *********/
    "global-require": "error", // 要求require()出现在顶层模块作用域中
    "no-buffer-constructor": "error", // 禁用Buffer()构造函数
    "no-mixed-requires": "error", // 禁止混合常规变量声明和require调用
    "no-new-require": "error", // 禁止调用require时使用new操作符
    "no-path-concat": "error", // 禁止对__dirname和__filename进行字符串连接
    "no-process-env": "error", // 禁用process.env
    "no-process-exit": "error", // 禁用process.exit()
    "no-restricted-modules": "error", // 禁用通过require加载的指定模块
  },
  overrides: [
    // 为特定类型的文件指定环境
    {
      files: [
        "**/__tests__/*.{j,t}s?(x)",
        "**/tests/unit/**/*.spec.{j,t}s?(x)",
      ],
      env: {
        jest: true, // Jest 全局变量。
      },
    },
    {
      // 若要禁用一组文件的配置文件中的规则,请使用 overrides 和 files。例如:
      files: ["*-test.js", "*.spec.js"],
      rules: {
        "no-unused-expressions": 0,
      },
    },
  ],
};