177 lines
4.7 KiB
TypeScript
177 lines
4.7 KiB
TypeScript
// https://eslint.org/docs/latest/use/configure/configuration-files-new
|
||
|
||
import eslint from "@eslint/js";
|
||
import pluginVue from "eslint-plugin-vue";
|
||
import pluginTypeScript from "@typescript-eslint/eslint-plugin";
|
||
import parserTypeScript from "@typescript-eslint/parser";
|
||
import vueParser from "vue-eslint-parser";
|
||
import globals from "globals";
|
||
import configPrettier from "eslint-config-prettier";
|
||
|
||
// 解析自动导入配置
|
||
import fs from "node:fs";
|
||
let autoImportGlobals = {};
|
||
try {
|
||
autoImportGlobals =
|
||
JSON.parse(fs.readFileSync("./.eslintrc-auto-import.json", "utf-8")).globals || {};
|
||
} catch (error) {
|
||
// 文件不存在或解析错误时使用空对象
|
||
console.warn("Could not load auto-import globals", error);
|
||
}
|
||
|
||
// Element Plus组件
|
||
const elementPlusComponents = {
|
||
// Element Plus 组件添加为全局变量,避免 no-undef 报错
|
||
ElInput: "readonly",
|
||
ElSelect: "readonly",
|
||
ElSwitch: "readonly",
|
||
ElCascader: "readonly",
|
||
ElInputNumber: "readonly",
|
||
ElTimePicker: "readonly",
|
||
ElTimeSelect: "readonly",
|
||
ElDatePicker: "readonly",
|
||
ElTreeSelect: "readonly",
|
||
ElText: "readonly",
|
||
ElRadioGroup: "readonly",
|
||
ElCheckboxGroup: "readonly",
|
||
ElOption: "readonly",
|
||
ElRadio: "readonly",
|
||
ElCheckbox: "readonly",
|
||
ElInputTag: "readonly",
|
||
ElForm: "readonly",
|
||
ElFormItem: "readonly",
|
||
ElTable: "readonly",
|
||
ElTableColumn: "readonly",
|
||
ElButton: "readonly",
|
||
ElDialog: "readonly",
|
||
ElPagination: "readonly",
|
||
ElMessage: "readonly",
|
||
ElMessageBox: "readonly",
|
||
ElNotification: "readonly",
|
||
ElTree: "readonly",
|
||
};
|
||
|
||
export default [
|
||
// 全局配置
|
||
{
|
||
// 指定要检查的文件
|
||
files: ["**/*.js", "**/*.ts", "**/*.vue"],
|
||
ignores: ["node_modules/**", "dist/**", "build/**"],
|
||
languageOptions: {
|
||
ecmaVersion: 2022,
|
||
sourceType: "module",
|
||
globals: {
|
||
...globals.browser, // 浏览器环境全局变量
|
||
...globals.node, // Node.js 环境全局变量
|
||
...autoImportGlobals, // 自动导入的 API 函数
|
||
...elementPlusComponents, // Element Plus 组件
|
||
// 全局类型定义,解决 TypeScript 中定义但 ESLint 不识别的问题
|
||
PageQuery: "readonly",
|
||
PageResult: "readonly",
|
||
OptionType: "readonly",
|
||
ResponseData: "readonly",
|
||
ExcelResult: "readonly",
|
||
TagView: "readonly",
|
||
AppSettings: "readonly",
|
||
__APP_INFO__: "readonly",
|
||
},
|
||
parser: parserTypeScript,
|
||
parserOptions: {
|
||
sourceType: "module",
|
||
},
|
||
},
|
||
rules: {
|
||
// 全局规则
|
||
"no-unused-vars": [
|
||
"error",
|
||
{
|
||
vars: "all",
|
||
args: "after-used",
|
||
ignoreRestSiblings: true,
|
||
argsIgnorePattern: "^_", // 忽略以下划线开头的参数
|
||
varsIgnorePattern: "^[A-Z][A-Z0-9_]*$", // 忽略全大写的常量/枚举
|
||
},
|
||
],
|
||
// 禁用未定义变量检查,TypeScript 已处理类型检查
|
||
"no-undef": "off",
|
||
},
|
||
},
|
||
|
||
// 基础 JavaScript 配置
|
||
eslint.configs.recommended,
|
||
|
||
// Vue 配置
|
||
{
|
||
files: ["**/*.vue"],
|
||
plugins: {
|
||
vue: pluginVue,
|
||
},
|
||
languageOptions: {
|
||
parser: vueParser,
|
||
parserOptions: {
|
||
ecmaVersion: 2022,
|
||
sourceType: "module",
|
||
parser: parserTypeScript,
|
||
},
|
||
},
|
||
processor: pluginVue.processors[".vue"],
|
||
rules: {
|
||
"vue/multi-word-component-names": "off",
|
||
"vue/no-v-html": "off",
|
||
"vue/require-default-prop": "off",
|
||
"vue/html-self-closing": [
|
||
"error",
|
||
{
|
||
html: {
|
||
void: "always",
|
||
normal: "never",
|
||
component: "always",
|
||
},
|
||
},
|
||
],
|
||
"vue/no-unused-vars": "off",
|
||
},
|
||
},
|
||
|
||
// TypeScript 配置
|
||
{
|
||
files: ["**/*.ts", "**/*.tsx", "**/*.vue"],
|
||
plugins: {
|
||
"@typescript-eslint": pluginTypeScript,
|
||
},
|
||
rules: {
|
||
"@typescript-eslint/no-explicit-any": "off",
|
||
"@typescript-eslint/no-empty-function": "off",
|
||
"@typescript-eslint/no-empty-object-type": "off",
|
||
"@typescript-eslint/ban-ts-comment": "off",
|
||
"@typescript-eslint/no-non-null-assertion": "off",
|
||
"@typescript-eslint/no-unused-vars": [
|
||
"error",
|
||
{
|
||
vars: "all",
|
||
args: "after-used",
|
||
ignoreRestSiblings: true,
|
||
argsIgnorePattern: "^_", // 忽略以下划线开头的参数
|
||
varsIgnorePattern: "^[A-Z][A-Z0-9_]*$", // 忽略全大写的常量/枚举
|
||
},
|
||
],
|
||
},
|
||
},
|
||
|
||
// CURD 组件配置
|
||
{
|
||
files: ["**/components/CURD/**/*.{ts,vue}"],
|
||
rules: {
|
||
"no-unused-vars": "off",
|
||
"@typescript-eslint/no-unused-vars": "off",
|
||
},
|
||
},
|
||
|
||
// Prettier 集成
|
||
{
|
||
rules: {
|
||
...configPrettier.rules,
|
||
},
|
||
},
|
||
];
|