Files
Edu/apps/teacher-portal/.eslintrc.tokens.js
SpecialX 0b42302a64 docs(admin-portal): 新增 nextstep-v2.md 记录下游核查结果
v1 声称完成的下游工作经核查实际未完成:
- api-gateway: /api/admin/graphql 路由未注册,go vet 编译失败
- teacher-bff: resolver 已完成但 schema 未同步(命名空间 vs 扁平)
- iam: proto 缺 BatchGetUsers rpc 声明

v2 记录详细核查证据和修复要求
2026-07-14 08:26:27 +08:00

68 lines
2.2 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 Design Tokens 配置P6 硬化)
*
* 强制设计令牌规范project_rules §3.10
* - 禁止 #hex 颜色字面量(用 var(--*) 或 Tailwind bg-* 类)
* - 禁止 'Inter'/'Fraunces'/'JetBrains Mono' 字体名字面量(用 var(--font-family-*))
*
* 这是独立配置文件,不修改主 eslint 配置。
* 使用方式eslint -c .eslintrc.tokens.js src
*
* 白名单(允许硬编码):
* - primitive.cssLayer 1 原始色板定义)
* - email-channel邮件模板内联样式邮件客户端不支持 CSS 变量)
* - manifest.tsPWA manifest 需要字面量颜色值)
*
* 关联project_rules §3.10、02-architecture-design.md §9
*/
// 使用 @typescript-eslint/parser 以支持 TS/TSX 语法
// (通过 Node.js 向上查找从根 node_modules 解析)
let tsParser;
try {
tsParser = require('@typescript-eslint/parser');
} catch {
// 依赖未安装时降级到默认 espree仅 JS/JSX
tsParser = undefined;
}
/** @type {import('eslint').Linter.Config[]} */
module.exports = [
{
// 目标文件:所有 TS/TSX/JS/JSX 源码
files: ['**/*.{ts,tsx,js,jsx}'],
languageOptions: {
parser: tsParser,
ecmaVersion: 2024,
sourceType: 'module',
parserOptions: {
ecmaFeatures: { jsx: true },
},
},
rules: {
'no-restricted-syntax': [
'error',
{
// 禁止 #hex 颜色字面量(如 "#fff"、"#000000"、"#f5f5f5"
selector: 'Literal[value=/^#[0-9a-fA-F]{3,8}$/]',
message:
'禁止硬编码颜色 #hex使用 var(--*) 或 Tailwind bg-* 类project_rules §3.10',
},
{
// 禁止字体名字面量next/font 的 import 标识符不受影响)
selector: 'Literal[value=/^(Inter|Fraunces|JetBrains Mono)$/]',
message:
'禁止硬编码字体名字面量,使用 var(--font-family-sans/serif/mono)project_rules §3.10',
},
],
},
},
{
// 白名单令牌原始定义、邮件通道、PWA manifest
files: ['**/primitive.css', '**/email-channel*', '**/manifest.ts'],
rules: {
'no-restricted-syntax': 'off',
},
},
];