100 lines
3.2 KiB
JavaScript
100 lines
3.2 KiB
JavaScript
// 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 [
|
|
// 指定检查文件和忽略文件
|
|
{
|
|
files: ["**/*.{js,mjs,cjs,ts,vue}"],
|
|
ignores: ["**/*.d.ts"],
|
|
},
|
|
// 全局配置
|
|
{
|
|
languageOptions: {
|
|
globals: {
|
|
...globals.browser,
|
|
...globals.node,
|
|
...autoImportConfig.globals,
|
|
...{
|
|
PageQuery: "readonly",
|
|
PageResult: "readonly",
|
|
OptionType: "readonly",
|
|
ResponseData: "readonly",
|
|
ExcelResult: "readonly",
|
|
TagView: "readonly",
|
|
AppSettings: "readonly",
|
|
__APP_INFO__: "readonly",
|
|
},
|
|
},
|
|
},
|
|
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, // 忽略解构赋值中同级未使用变量的警告
|
|
},
|
|
],
|
|
},
|
|
},
|
|
// 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", // 允许单个单词组件名
|
|
},
|
|
},
|
|
];
|