Files
Thing/eslint.config.mjs
T
2026-09-22 19:10:16 +08:00

81 lines
2.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.
// ESLint 平坦配置 —— 落地 UI_DESIGN_SYSTEM.md 第 5 章的 D 系约束。
// 依赖:eslint / eslint-plugin-vue / @vue/eslint-config-typescript(见 package.json devDependencies
// 运行:bun run lint
import pluginVue from 'eslint-plugin-vue'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
export default defineConfigWithVueTs(
{
ignores: [
'dist/**',
'node_modules/**',
'src-tauri/**',
'release_stage/**',
'ThingHK/**',
],
},
// flat/essential:只保留「防错」规则(v-for key、重复 attr 等),
// 不含缩进/引号等格式规则 —— 3183 条里 3038 条是格式噪音,与既有代码风格无关
pluginVue.configs['flat/essential'],
vueTsConfigs.recommended,
{
rules: {
// ---- D2:禁止 Tailwind 原生色阶,必须使用语义 token ----
'no-restricted-syntax': [
'error',
{
selector:
"Literal[value=/(bg|text|border|ring|fill|stroke)-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-[0-9]{2,3}(\\/[0-9]{1,3})?/]",
message:
'D2 禁止 Tailwind 原生色阶:请使用语义 tokenbg-card / text-success-text / border-border 等),见 UI_DESIGN_SYSTEM.md',
},
{
// D9:生产代码禁止外部字体 CDN
selector:
"Literal[value=/@import\\s+url\\(['\\\"]?https:\\/\\/(fonts\\.googleapis|fonts\\.gstatic)\\./]",
message: 'D9 禁止外部字体 CDN:使用系统字体栈',
},
],
// ---- 未使用变量:_ 前缀豁免(Pinia action 占位、解构占位等惯例)----
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrors: 'none',
},
],
// ---- Vue 风格:与既有代码一致 ----
'vue/multi-word-component-names': 'off',
'vue/max-attributes-per-line': 'off',
'vue/singleline-html-element-content-newline': 'off',
'vue/html-self-closing': 'off',
'vue/attributes-order': 'off',
},
},
// .d.ts 声明文件:Vue 官方模板的 ImportMetaEnv 写法使用 {} 与 any,豁免
{
files: ['**/*.d.ts'],
rules: {
'@typescript-eslint/no-empty-object-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
},
// feiniuStore 是飞牛 NAS 的 API 适配层:后端原始结构未在前端定型(字段类型化需对接 Rust 端),
// 边界层暂豁免 no-explicit-any;定型后应移除此豁免
{
files: ['src/stores/feiniuStore.ts'],
rules: {
'@typescript-eslint/no-explicit-any': 'off',
},
},
// xterm 等第三方深色区域如需豁免,在下方追加 overrides
)