work-order-monitor/eslint.config.js

152 lines
3.6 KiB
JavaScript
Raw Permalink Normal View History

2026-03-31 17:08:30 +08:00
import js from "@eslint/js";
import prettier from "eslint-config-prettier";
import importPlugin, {
createNodeResolver,
flatConfigs,
} from "eslint-plugin-import-x";
import prettierPlugin from "eslint-plugin-prettier";
import vuePlugin from "eslint-plugin-vue";
import globals from "globals";
import ts from "typescript-eslint";
export default [
// 全局忽略
{
ignores: [
"**/node_modules/*",
"**/dist/*",
"build/",
"public/",
"docs/",
"bin/",
"pnpm-lock.yaml",
".vscode/",
".idea/",
".husky/",
"Dockerfile",
".hbuilderx/",
".vite/",
"uni_modules/",
"libs/",
"static/",
"patches/",
"wxcomponents/",
"lib/",
"scripts/",
"src-tauri/",
"**/*.bak.*",
],
},
// 应用推荐规则
js.configs.recommended,
...ts.configs.recommended,
// Vue 推荐规则
...vuePlugin.configs["flat/recommended"],
// prettier 必须在所有规则之后,关闭与 prettier 冲突的格式规则
prettier,
// 基础配置
{
files: ["**/*.{js,mjs,cjs,ts,vue}"],
plugins: { prettier: prettierPlugin, "import-x": importPlugin },
settings: {
"import-x/resolver-next": [
createNodeResolver(),
(
await import("eslint-import-resolver-typescript")
).createTypeScriptImportResolver({
project: ["tsconfig.json"],
}),
],
},
languageOptions: {
globals: {
...globals.node,
...globals.browser,
},
ecmaVersion: "latest",
sourceType: "module",
parserOptions: {
ecmaFeatures: {
impliedStrict: true,
},
},
},
rules: {
...flatConfigs.recommended.rules,
// Prettier 规则
"prettier/prettier": "warn",
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
// Import 规则
"import-x/no-self-import": "error",
"import-x/no-cycle": "error",
"import-x/no-useless-path-segments": "error",
"import-x/no-extraneous-dependencies": "error",
"import-x/no-mutable-exports": "error",
"import-x/no-named-as-default": "error",
"import-x/no-named-as-default-member": "error",
"import-x/no-duplicates": "warn",
"import-x/no-deprecated": "warn",
"import-x/newline-after-import": "warn",
"import-x/first": "warn",
"import-x/order": [
"warn",
{
groups: [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index",
"object",
"type",
],
alphabetize: {
order: "asc",
},
},
],
// TypeScript 宽松规则(对已有代码降级)
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-empty-object-type": "warn",
"@typescript-eslint/no-unused-vars": [
"warn",
{ varsIgnorePattern: "^_", argsIgnorePattern: "^_" },
],
},
},
// Vue 文件专属配置:在 script 块中使用 TypeScript 解析器
{
files: ["**/*.vue"],
languageOptions: {
parserOptions: {
parser: ts.parser,
extraFileExtensions: [".vue"],
sourceType: "module",
},
},
},
// 测试文件覆盖配置
{
files: ["**/__tests__/*.{j,t}s?(x)", "**/tests/unit/**/*.spec.{j,t}s?(x)"],
languageOptions: {
globals: {
...globals.mocha,
...globals.jest,
},
},
},
];