# 代码质量门禁 ## 概述 项目配置了自动化质量门禁,确保代码提交前通过所有质量检查。 ## 质量检查 ### 1. 代码风格检查 **工具**: ESLint(flat config:`eslint.config.mjs`) **检查时机**: - pre-commit hook:`.husky/pre-commit` → `npx lint-staged` → `.lintstagedrc.json` 仅对 `*.{js,jsx,ts,tsx}` 执行 `eslint --fix` - `npm run lint`(全仓)、`npm run test:all` - CI「🔍 代码质量检查」阶段(`Jenkinsfile`) **检查内容**: - 代码语法错误 - 代码风格规范 - 自动可修复项的格式化(仅暂存文件,pre-commit 阶段) **通过标准**: **0 error**。warning **不判红**——这是本项目的显式裁定(见 `CONTEXT.md`「lint warning 分级与门禁判定口径」);把 warning 清零不是门禁前置条件,但**不得**为凑绿而把它们调成 `off`。 **warning 数量口径(本文件为版本库内的权威记录位)**:2026-09-23 **第二周期**最终树实测 `npm run lint` ⇒ **EXIT=0,`✖ 104 problems (0 errors, 104 warnings)`**,分项相加 = 104:**55** `no-console` / **25** `@typescript-eslint/no-explicit-any` / **11** `react-hooks/set-state-in-effect` / **10** `@next/next/no-img-element` / 各 1 `@next/next/no-sync-scripts`、`@next/next/no-html-link-for-pages`、`Unused eslint-disable directive`(死抑制)。同日**第一周期**记录的 105 条与本树只差 1,且差值唯一归因为 `set-state-in-effect` **12→11**(后台编辑器的"挂载期消费守卫"那个效果被删)——**没有任何一项是本周期新增**。该计数**随树漂移**(上一轮 chain4/chain6 为 106/56),引用时必须同时给复算命令,不得当作常量: ```bash npm run lint # 看末行 ✖ N problems npm run lint 2>&1 | grep -oE '[a-z@/_-]+/[a-z-]+$' | sort | uniq -c | sort -rn # 分项 ``` > ⚠ 不要再以 `AGENTS.md` §5 为该数字的出处:`AGENTS.md` 被 `.gitignore` 有意排除、从未被 git 跟踪、并由 `next dev` 再生(验收 N-16),其内容不可审、不可回滚、可能随再生丢失,只当本地便签。 **已知例外(须保留原因)**:`eslint.config.mjs` 的按路径 override 只在三类位置降档——`ruixin/e2e-tests`(`e2e/**/*.ts` 关 `no-console`,`:65-71`)、`ruixin/unit-tests`(`**/*.test.{ts,tsx}`、`**/__tests__/**` 关 `@typescript-eslint/no-explicit-any`,`:73-79`)、`ruixin/performance-tests`(`tests/performance/*.js`,`:81`)。**`prisma/seed.ts` 不在任何 override 内**,它的 `no-console` 仍是 warning 形态存在(占 §5 计数的大头),属「种子脚本进度日志」的有意容忍项,而非配置豁免(其数量口径见本节上方的 warning 分项表)。 ### 2. 提交信息规范 **工具**: commitlint **检查时机**: commit-msg hook **检查内容**: - 提交信息格式 - 提交类型合法性 **通过标准**: 符合Conventional Commits规范 **提交类型**: - `feat`: 新功能 - `fix`: 修复bug - `docs`: 文档更新 - `style`: 代码格式调整 - `refactor`: 重构 - `perf`: 性能优化 - `test`: 测试相关 - `chore`: 构建/工具相关 - `revert`: 回滚提交 - `build`: 构建相关 - `ci`: CI/CD相关 **提交信息格式**: ``` ():