曹睿
2025-05-21 fe6dbaaefef6dd9bb4a1ee26df8ad8b451500a10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// https://eslint.nodejs.cn/docs/latest/use/configure/configuration-files
 
import globals from "globals";
import pluginJs from "@eslint/js"; // JavaScript 规则
import pluginVue from "eslint-plugin-vue"; // Vue 规则
import pluginTypeScript from "@typescript-eslint/eslint-plugin"; // TypeScript 规则
 
import parserVue from "vue-eslint-parser"; // Vue 解析器
import parserTypeScript from "@typescript-eslint/parser"; // TypeScript 解析器
 
import configPrettier from "eslint-config-prettier"; // 禁用与 Prettier 冲突的规则
import pluginPrettier from "eslint-plugin-prettier"; // 运行 Prettier 规则
 
// 解析自动导入配置
import fs from "fs";
const autoImportConfig = JSON.parse(fs.readFileSync(".eslintrc-auto-import.json", "utf-8"));
 
/** @type {import('eslint').Linter.Config[]} */
export default [
  // 忽略指定文件
  {
    ignores: [
      "node_modules/**",
      "dist/**",
      "unpackage/**",
      "public/**",
      "static/**",
      "**/u-charts/**",
      "**/qiun-**/**",
      "**/auto-imports.d.ts",
      "src/types/auto-imports.d.ts",
    ],
  },
  // 检查文件的配置
  {
    files: ["**/*.{js,mjs,cjs,ts,vue}"],
    ignores: ["**/*.d.ts"],
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
        ...autoImportConfig.globals,
        ...{
          uni: "readonly", // uni-app 全局对象
          UniApp: "readonly", // uni-app 全局对象
          ResponseData: "readonly", // 统一响应数据类型
          PageResult: "readonly", // 分页结果数据类型
          PageQuery: "readonly", // 分页查询数据类型
          OptionType: "readonly", // 选项类型
          getCurrentPages: "readonly", // uni-app 全局 API
        },
      },
    },
    plugins: { prettier: pluginPrettier },
    rules: {
      ...configPrettier.rules, // 关闭与 Prettier 冲突的规则
      ...pluginPrettier.configs.recommended.rules, // 启用 Prettier 规则
      "prettier/prettier": "error", // 强制 Prettier 格式化
      "no-unused-vars": [
        "error",
        {
          argsIgnorePattern: "^_", // 忽略参数名以 _ 开头的参数未使用警告
          varsIgnorePattern: "^[A-Z0-9_]+$", // 忽略变量名为大写字母、数字或下划线组合的未使用警告(枚举定义未使用场景)
          ignoreRestSiblings: true, // 忽略解构赋值中同级未使用变量的警告
        },
      ],
      "no-prototype-builtins": "off", // 允许直接调用Object.prototype方法
      "no-constant-binary-expression": "warn", // 将常量二元表达式警告降为警告级别
    },
  },
  // JavaScript 配置
  pluginJs.configs.recommended,
 
  // TypeScript 配置
  {
    files: ["**/*.ts"],
    ignores: ["**/*.d.ts"], // 排除d.ts文件
    languageOptions: {
      parser: parserTypeScript,
      parserOptions: {
        sourceType: "module",
      },
    },
    plugins: { "@typescript-eslint": pluginTypeScript },
    rules: {
      ...pluginTypeScript.configs.strict.rules, // TypeScript 严格规则
      "@typescript-eslint/no-explicit-any": "off", // 允许使用 any
      "@typescript-eslint/no-empty-function": "off", // 允许空函数
      "@typescript-eslint/no-empty-object-type": "off", // 允许空对象类型
    },
  },
 
  // Vue 配置
  {
    files: ["**/*.vue"],
    languageOptions: {
      parser: parserVue,
      parserOptions: {
        parser: parserTypeScript,
        sourceType: "module",
      },
    },
    plugins: { vue: pluginVue, "@typescript-eslint": pluginTypeScript },
    processor: pluginVue.processors[".vue"],
    rules: {
      ...pluginVue.configs["vue3-recommended"].rules, // Vue 3 推荐规则
      "vue/no-v-html": "off", // 允许 v-html
      "vue/multi-word-component-names": "off", // 允许单个单词组件名
    },
  },
 
  // 单独针对第三方组件的处理
  {
    files: ["**/qiun-data-charts.vue", "**/qiun-data-charts/**/*.vue", "**/u-charts/**"],
    linterOptions: {
      noInlineConfig: false,
      reportUnusedDisableDirectives: false,
    },
    rules: {
      // 禁用所有规则
      ...Object.fromEntries(
        Object.keys(pluginVue.configs["vue3-recommended"].rules || {}).map((key) => [key, "off"])
      ),
      "no-unused-vars": "off",
      "no-prototype-builtins": "off",
      "@typescript-eslint/no-explicit-any": "off",
    },
  },
];