81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
// 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 原生色阶:请使用语义 token(bg-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
|
||
)
|