Files
erp-frontend/eslint.config.js

166 lines
7.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineConfig } from "eslint/config";
import eslint from "@eslint/js";
import globals from "globals";
import pluginVue from "eslint-plugin-vue";
import configPrettier from "eslint-config-prettier";
import pluginPrettier from "eslint-plugin-prettier";
import pluginTypeScript from "@typescript-eslint/eslint-plugin";
import * as parserVue from "vue-eslint-parser";
import * as parserTypeScript from "@typescript-eslint/parser";
import projectGlobals from "./.eslintrc-globals.js";
export default defineConfig([
eslint.configs.recommended,
{ ignores: ["**/.*", "**/dist/*", "*.d.ts", "public", "**/assets/*"] }, // 忽略文件配置单独放在一个对象,否则不生效
{
languageOptions: {
globals: {
...globals.browser,
...globals.es6,
...globals.node,
...projectGlobals,
},
},
plugins: {
prettier: pluginPrettier,
},
// 不指定 files则默认是所有文件生效
rules: {
...configPrettier.rules,
...pluginPrettier.configs.recommended.rules,
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", // 禁用 debugger
"no-unused-vars": [process.env.NODE_ENV === "production" ? "warn" : "warn", { vars: "all", args: "none" }], // 禁止出现未使用的变量,函数和函数的参数
"no-undef": process.env.NODE_ENV === "production" ? "warn" : "warn", // 禁用未声明的变量,除非它们在 /*global */ 注释中被提到
"no-console": "off", // 禁用 console
"accessor-pairs": "error", // 强制 getter 和 setter 在对象中成对出现
eqeqeq: ["error", "always", { null: "ignore" }], // 要求使用 === 和 !==
"no-class-assign": "error", // 禁止修改类声明的变量
"no-cond-assign": "error", // 禁止条件表达式中出现赋值操作符
"no-const-assign": "error", // 禁止修改 const 声明的变量
"no-dupe-keys": "error", // 禁止对象字面量中出现重复的 key
"no-empty-pattern": "error", // 禁止使用空解构模式
"no-extra-boolean-cast": "error", // 禁止不必要的布尔转换
"no-func-assign": "error", // 禁止对 function 声明重新赋值
"no-irregular-whitespace": "error", // 禁止不规则的空白
"no-label-var": "error", // 不允许标签与变量同名
"no-labels": ["error", { allowLoop: false, allowSwitch: false }], // 禁用标签语句
"no-lone-blocks": "error", // 禁用不必要的嵌套块
"no-multi-str": "error", // 禁止多行字符串
"no-global-assign": "error", // 不允许修改只读全局变量
"no-new-native-nonconstructor": "error", // 禁止 new Symbol、new Array、new Map 等
"no-new-wrappers": "error", // 禁止对 StringNumber 和 Boolean 使用 new 操作符
"no-obj-calls": "error", // 禁止把全局对象作为函数调用
"no-redeclare": "error", // 禁止多次声明同一变量
"no-return-assign": ["error", "except-parens"], // 禁止在 return 语句中使用赋值语句
"no-self-assign": "error", // 禁止自我赋值
"no-self-compare": "error", // 禁止自身比较
"no-sequences": "error", // 禁用逗号操作符
"func-call-spacing": "error", // 要求或禁止在函数标识符和其调用之间有空格
"no-undef-init": "error", // 禁止将变量初始化为 undefined
"no-unmodified-loop-condition": "error", // 该规则查找循环条件内的引用,然后检查这些引用的变量是否在循环中被修改
"no-unneeded-ternary": ["error", { defaultAssignment: false }], // 当存在更简单的选择时,此规则不允许三元运算符
"no-unreachable": "error", // 禁止在 return、throw、continue 和 break 语句后出现不可达代码
"no-unreachable-loop": "error", // 禁止循环体允许一次迭代的循环
"prefer-const": "error", // 要求使用 const 声明那些声明后不再被修改的变量
"no-useless-escape": "off", // 取消不必要的转义字符
},
},
{
files: ["**/*.vue"],
languageOptions: {
parser: parserVue,
parserOptions: {
parser: "@typescript-eslint/parser",
ecmaVersion: "latest",
ecmaFeatures: {
jsx: true,
},
extraFileExtensions: [".vue"],
sourceType: "module",
},
},
plugins: {
vue: pluginVue,
},
processor: pluginVue.processors[".vue"],
rules: {
...pluginVue.configs.base.rules,
...pluginVue.configs["essential"].rules,
...pluginVue.configs["recommended"].rules,
// vue (https://eslint.vuejs.org/rules)
"vue/v-slot-style": "error", // 强制执行 v-slot 指令样式
"vue/no-mutating-props": "off", // 不允许组件 prop 的改变
"vue/custom-event-name-casing": "off", // 为自定义事件名称强制使用特定大小写
"vue/attributes-order": "off", // vue api 使用顺序,强制执行属性顺序
"vue/one-component-per-file": "off", // 强制每个组件都应该在自己的文件中
"vue/html-closing-bracket-newline": "off", // 在标签的右括号之前要求或禁止换行
"vue/max-attributes-per-line": "off", // 强制每行的最大属性数
"vue/attribute-hyphenation": "off", // 对模板中的自定义组件强制执行属性命名样式
"vue/require-default-prop": "off", // 此规则要求为每个 prop 为必填时,必须提供默认值
"vue/multi-word-component-names": "off", // 要求组件名称始终为 “-” 链接的单词
"vue/valid-template-root": "off",
"vue/singleline-html-element-content-newline": "off", // 在单行元素的内容之前和之后需要换行符
"vue/multiline-html-element-content-newline": "off", // 在多行元素的内容之前和之后需要换行符
"vue/no-v-html": "off", // 禁止使用 v-html 来防止 XSS 攻击
},
},
{
files: ["**/*.?([cm])ts", "**/*.?([cm])tsx"],
languageOptions: {
// 使用了 @typescript-eslint/parser 解析器,下面 parserOptions 是该解析器的配置信息官网参考https://typescript.eslint.org.cn/packages/parser/#jsxpragma
parser: parserTypeScript,
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
warnOnUnsupportedTypeScriptVersion: false,
},
},
plugins: {
"@typescript-eslint": pluginTypeScript,
},
rules: {
...pluginTypeScript.configs.strict.rules,
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/no-redeclare": "error",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/prefer-as-const": "warn",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-unused-expressions": "off",
"@typescript-eslint/no-unsafe-function-type": "off",
"@typescript-eslint/no-import-type-side-effects": "error",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-wrapper-object-types": "off",
"@typescript-eslint/no-namespace": "off",
"@typescript-eslint/consistent-type-imports": [
"off",
{ disallowTypeAnnotations: false, fixStyle: "inline-type-imports" },
],
"@typescript-eslint/prefer-literal-enum-member": ["error", { allowBitwiseExpressions: true }],
"@typescript-eslint/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
},
],
"@typescript-eslint/no-dynamic-delete": "off",
},
},
{
files: ["**/*.d.ts"],
rules: {
"import/no-duplicates": "off",
},
},
{
files: ["**/*.?([cm])js"],
rules: {
"@typescript-eslint/no-require-imports": "off",
"@typescript-eslint/no-var-requires": "off",
},
},
]);