/* eslint-env node */ require("@rushstack/eslint-patch/modern-module-resolution"); module.exports = { root: true, extends: [ "plugin:vue/vue3-essential", "eslint:recommended", "@vue/eslint-config-typescript", "@vue/eslint-config-prettier", "plugin:prettier/recommended", ], parserOptions: { ecmaVersion: "latest", }, rules: { // 'prettier/prettier': 'warn', "prettier/prettier": "warn", /** vue相关 **/ "vue/html-self-closing": 0, // 单行允许有的attr数量 "vue/max-attributes-per-line": [ 1, { singleline: 10, multiline: 3 }, ], // 关闭子组件必须换行 "vue/singleline-html-element-content-newline": "off", "vue/multiline-html-element-content-newline": "off", "vue/component-name-in-template-casing": [ 2, "kebab-case", { registeredComponentsOnly: false, ignores: [], }, ], // 组件名称强制为Pascal case "vue/name-property-casing": [2, "PascalCase"], // 对于v-html指令,开启警告 "vue/no-v-html": 1, "vue/attributes-order": 0, "vue/mustache-interpolation-spacing": 0, "vue/no-unused-components": 1, /** 变量申明相关 **/ // 变量申明要求使用 let 或 const 而不是 var "no-var": 2, // 不允许在块中function、var的申明 "no-inner-declarations": [2, "both"], // 变量不强制为camelcase camelcase: 0, // 构造函数首字母必须大写 "new-cap": [ 2, { newIsCap: true, capIsNew: false, }, ], // 尽量不要出现变量及函数参数定义了不使用的情况 "no-unused-vars": [ 1, { vars: "all", args: "none", }, ], // 禁止在变量定义之前使用它们 "no-use-before-define": 0, // 不检测该类型 // 要求所有的 var 声明出现在它们所在的作用域顶部,同时应尽量不要使用var申明变量,用let, const代替 "vars-on-top": 2, "no-constant-condition": 1, /** 编码风格相关 **/ // 不强制结尾分号,为保证代码风格一致性,建议统一不使用分号,但应注意不要混淆多行表达式 semi: 0, // 代码缩进为2个空格 indent: [ 1, 2, { SwitchCase: 1, }, ], // 箭头函数的箭头前后应该有空格 "arrow-spacing": [ 2, { before: true, after: true, }, ], // 花括号风格采用one true brace style "brace-style": [ 2, "1tbs", { allowSingleLine: true, }, ], // 禁止空格和 tab 的混合缩进 "no-mixed-spaces-and-tabs": 2, // 最大的连续空行限制为2行 "no-multiple-empty-lines": [ 2, { max: 2, }, ], // 不强制在对象和数组字面量中使用一致的拖尾逗号,但所有的风格应尽量保持统一 "comma-dangle": 0, // 逗号后需要跟空格 "comma-spacing": [ 2, { before: false, after: true, }, ], // 允许在字符串和注释以外用一些不规则的空格,但是整体风格应尽量保持统一 "no-irregular-whitespace": 0, // 逗号应该在语句后面 "comma-style": [2, "last"], // 强制所有控制语句花括号不能省略 curly: [2, "all"], // 要求 switch 语句中必须有 default 分支,或者有 // no default 注释 "default-case": 2, // 禁止switch的case语句不break、return等结尾,若有意为之,请添加 // no break 类似注释语句 "no-fallthrough": [ 2, { commentPattern: "no[\\s\\w]*break", }, ], // 不允许使用带标签的break,continue等语句 "no-labels": 2, // 换行符应该在成员表达式中的点之前 "dot-location": [2, "property"], // 对象属性访问不强制使用点操作符,如 foo["bar"] "dot-notation": 0, // 除null外,对比时强制要求使用 === 和 !== eqeqeq: [ 1, "always", { null: "ignore", }, ], // 禁止在函数标识符和其调用之间有空格 "func-call-spacing": [2, "never"], // JSX 属性值强制使用双引号 "jsx-quotes": [2, "prefer-double"], // 对象字面量属性冒号前不能有空格,冒号后必须跟空格 "key-spacing": [ 2, { beforeColon: false, afterColon: true, }, ], // if else for 等关键字前后必须跟空格 "keyword-spacing": [ 2, { before: true, after: true, }, ], // 强制 getter 和 setter 在对象中成对出现 "accessor-pairs": 2, // 不应该使用构造函数来构造新Array数组 "no-array-constructor": 2, // 尽量不要使用arguments.caller和arguments.callee "no-caller": 1, // 不得对变量使用delete "no-delete-var": 2, // 禁止重复模块导入 "no-duplicate-imports": 2, // 出现空函数告警,如果确实需要,函数体中可以加上注释 "no-empty-function": 1, // 禁止使用空解构模式,如 const {a: {}} = foo; "no-empty-pattern": 2, // 禁止使用 eval() "no-eval": 2, // 禁止使用类似 eval() 的方法,如 setTimeout("alert('Hi!');", 100) "no-implied-eval": 2, // 禁止对 Function 对象使用 new 操作符,原因与eval相同 "no-new-func": 2, // 禁用 with 语句 "no-with": 2, // 允许强制转换变量为boolean类型,如 !!bar,但是很多情况没有必要 "no-extra-boolean-cast": 0, // 禁止数字字面量中使用前导和末尾小数点,如 .5, 2., -.7等 "no-floating-decimal": 2, // 禁止使用 __iterator__ 属性 "no-iterator": 2, // 不允许使用 new require表达式 "no-new-require": 2, // 禁止对 __dirname 和 __filename 进行字符串连接,应该用path.join等方法代替 "no-path-concat": 2, // 关闭禁止直接调用 Object.prototypes 的内置属性规则 "no-prototype-builtins": 0, // 不允许字符串文字中的八进制转义序列,如 "abc \234" "no-octal-escape": 2, // 不允许使用 __proto__ 属性,应该用Object.getPrototypeOf和Object.setPrototypeOf方法代替 "no-proto": 2, // 不允许在return语句中使用赋值运算符,如 return foo = bar + 2; "no-return-assign": [2, "always"], // 尽量不要在常规字符串中出现模板字面量占位符语法 "no-template-curly-in-string": 1, // 尽量不要在 return、throw、continue 和 break 语句后出现不可达代码 "no-unreachable": 1, // 尽量少地在对象中使用不必要的计算属性 "no-useless-computed-key": 1, // 尽量不要使用没有意义的构造函数,如空的构造函数 "no-useless-constructor": 1, // 尽量不要使用没必要的字符转义 "no-useless-escape": 1, // 如果对象的属性位于同一行上,则不允许围绕点或在开头括号之前留出空白 "no-whitespace-before-property": 2, // 使用 symbol 时必须有描述 "symbol-description": 2, // 不限制使用console,但是在生成环境应该尽量删除 "no-console": 0, // 不允许在生产环境的代码中有alert、confirm 和 prompt "no-alert": process.env.NODE_ENV === "production" ? 2 : 0, // 不允许在生产环境的代码中有debugger "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0, // 禁止解析闭合标签 x-invalid-end-tag 报错 "no-parsing-error": [ 2, { "x-invalid-end-tag": false, }, ], }, };