生成代码要排除在检查之外
由工具生成的代码(协议缓冲区产物、模板渲染结果、代码生成器输出)不该参与人工检查:它们数量大、风格固定、修改方式是从生成器重新生成,纳入检查只会让真实问题淹没在噪声里。排除方式有三种:按目录整体排除、在文件头加生成标记、利用工具的按后缀或规则排除能力。排除范围要覆盖静态检查、格式化、覆盖率统计与评审清单。
基本信息
| 手段 | 目录排除、文件头生成标记、工具内置排除规则 |
|---|---|
| 覆盖范围 | 静态检查、格式化、覆盖率统计、代码评审 |
| 目标 | 只检查人写的代码,噪声不淹没真实问题 |
| 配套要求 | 生成器版本锁定,生成命令可复现 |
典型使用场景
- 协议缓冲区与接口定义产物:按文件后缀或输出目录整体排除
- 前端路由与图标索引自动生成:在输出目录配置忽略规则
- 数据库迁移脚手架:生成的样板文件不纳入风格检查
- 覆盖率统计:排除生成的客户端与服务端桩代码,避免分母失真
- 代码评审:生成物只看生成器输入与配置,不逐行评审产物
排除配置示例
排除配置示例
# 按目录或文件后缀排除
ESLint 配置中的 ignores 指向生成目录,例如 src/gen 下全部文件
静态检查工具通过 exclude-dirs 指定生成目录
按后缀识别,例如 *.pb.go 或 *_generated.ts 天然被过滤
# 文件头标记方式:在生成文件首行写入自动生成提示
# 生成器在重新生成时会保留该标记排除手段对照
| 手段 | 适用情形 | 注意点 |
|---|---|---|
| 目录排除 | 输出目录固定且独立 | 目录改名时要同步更新规则 |
| 文件头标记 | 生成物与手写代码混放 | 标记要由生成器统一写入 |
| 后缀过滤 | 文件命名有统一约定 | 新增生成器时需检查命名是否遵守约定 |
| 规则内联排除 | 个别规则在生成文件上误报 | 豁免要写原因,避免变成长期忽略 |
生成物建议只提交产物、不评审内容:评审重心放在生成器配置与输入定义上。产物有争议时,先改定义再重新生成,而不是直接编辑产物。
排除规则要同时覆盖检查与统计两端:只排除静态检查而忘记覆盖率,生成物仍会把覆盖率分母拉大,得出失真的结论。
落地检查清单
- 生成目录或文件命名有统一约定,便于配置排除
- 静态检查、格式化、覆盖率统计使用同一套排除清单
- 生成器版本与生成命令有记录,可复现产物
- 排除清单定期复核,避免误排除手写代码