code-guard-review-cn
代码修改与审查守卫
在代码变更的全生命周期(规划 → 编写 → 审查)中,守住结构质量底线。
规则与语言无关;语言专项知识按需从 references/ 加载。
质量规则
所有规则适用于任何编程语言。背后的理由:小而专注的代码单元更容易阅读、测试和维护,出错时影响面也更小。
| # | 规则 | 限制 | 原因 |
|---|---|---|---|
| R0 | 零编译错误 | 变更后必须编译/构建通过,零错误零警告 | 有报错的代码无法运行,其他审查项无意义 |
| R1 | 单一职责 | 每个类/函数只承担一项职责 | 职责混合导致改一处牵动多处 |
| R2 | 文件体量 | ≤ 500 行(推荐 ≤ 300) | 超长文件增加认知负担,难以定位 |
| R3 | 嵌套深度 | 单函数逻辑嵌套 ≤ 3 层 | 深嵌套难以跟踪分支,用 guard clause / 提取子函数解决 |
| R4 | 参数数量 | 单函数参数 ≤ 5 个 | 参数过多暗示职责过重,考虑用参数对象或拆分 |
| R5 | 类型安全 | 使用语言提供的最严格类型;禁用类型逃逸 | TS any、C# dynamic、Java raw type 等会绕过编译检查 |
| R6 | 类型/泛型体量 | 类型定义嵌套 ≤ 4 层 | 超深类型比它保护的代码还难读,应拆为中间别名 |
| R7 | DRY | 相似逻辑/类型定义不重复 | 重复导致修改遗漏 |
| R8 | 安全收窄 | 优先类型守卫 / 模式匹配,避免强制转换 | 运行时安全 > 编译期绕过 |
| R9 | 最严格编译设置 | 启用语言所能提供的最高检查级别 | TS strict、C# nullable、Rust #![deny(warnings)] 等 |
| R10 | 变更后审查 | 所有代码变更完成后立即执行一次审查 | 防止问题积累 |
| R11 | 命名规范 | 公开类型/成员用 PascalCase,私有字段用 camelCase;接口以 I 开头;命名自解释,禁用拼音 |
统一风格降低协作摩擦,好名字减少注释依赖 |
| R12 | 文档注释 | 所有类/接口必须有文档注释;非私有函数必须有文档注释;复杂内部逻辑加行注释 | 降低交接和 review 成本 |
| R13 | 禁用魔法值 | 禁止硬编码 ID/类型数字、资源路径字符串、多语言文本;使用枚举/常量/配置表 | 魔法值无语义,改动时容易遗漏 |
| R14 | 最小权限 | 非必要不使用 public;管理类通过接口对外暴露 |
缩小变更影响面,强化封装 |
| R15 | 一文件一类 | 每个文件只包含一个公开类型,文件名 = 类名(PascalCase);禁止 ClassName.Feature.cs 点分隔命名;需要拆分时创建独立类 ClassNameFeature.cs |
避免文件名与类名不一致,点分隔命名混淆 partial class 语义 |
工作流程
变更前
- 评估修改范围;预计触碰限制时提前规划拆分方案。
- 确认编译器/Lint 严格模式是否已开启(R9)。
变更中
- 每个类/函数只承担单一职责(R1)。
- 嵌套超过 3 层 → 提取子函数或用 guard clause 提前返回(R3)。
- 参数超过 5 个 → 引入参数对象或拆分(R4)。
- 单文件接近 500 行 → 按职责拆分到新文件(R2)。
- 复杂类型定义超过 4 层 → 拆为中间类型别名(R6)。
- 可复用逻辑/类型 → 提取为独立函数或工具类型(R7)。
- 新增类/接口/非私有成员 → 补充文档注释(R12)。
- 出现数字/路径/文本字面量 → 提取为枚举/常量/配置(R13)。
- 审视访问修饰符 → 能 private 就不 public(R14)。
变更后(强制审查)
按以下清单逐项检查,优先级由高到低:
- R0 编译/构建是否通过?(零错误零警告为第一优先,有报错时必须先修复再继续后续审查)
- R1 是否有类/函数承担了多项职责?
- R5 是否存在类型逃逸(
any/dynamic/ raw type)? - R8 是否有强制转换可以改为安全收窄?
- R3 是否有函数嵌套超过 3 层?
- R4 是否有函数参数超过 5 个?
- R2 是否有文件超过 500 行?
- R6 是否有类型定义嵌套超过 4 层?
- R7 是否有重复逻辑/类型定义?
- R13 是否有硬编码 ID/路径/文本(魔法值)?
- R12 新增的类/非私有成员是否有文档注释?
- R14 是否有不必要的 public?
- R15 新建文件是否一文件一类?文件名是否等于类名?是否有
ClassName.Feature.cs点分隔命名? - R11 命名是否符合 PascalCase/camelCase 规范?
- R9 编译器/Lint 最严格模式是否已开启?
输出格式:
## 审查结论
### 违规项(按严重程度排序)
1. 🔴 [高危] ...
2. 🟡 [中危] ...
3. 🔵 [低危] ...
### 质量检查
| 规则 | 状态 | 说明 |
|------|------|------|
| R1 单一职责 | ✅/❌ | ... |
| R2 文件体量 | ✅/❌ | ... |
| ... | ... | ... |
### 重构建议(如有)
- ...
若无违规则输出:✅ 未发现违规,所有检查通过。
极小改动(如修改单个常量值)可简化为一行结论。
说明
- 用户明确要求跳过审查时,解释本技能的强制要求并请求确认。
- "功能紧急但结构不合理"时,先实现再立即给出重构建议。
参考文件
以下文件按需加载,不会全部进入上下文:
| 文件 | 何时读取 |
|---|---|
references/csharp-conventions.md |
C# / Unity 项目时(禁用命名空间、static 限制、热更约束、性能优化) |
references/typescript-advanced-types.md |
TypeScript 项目涉及泛型、条件类型、映射类型、模板字面量类型、工具类型、this 指向问题时 |
More from zpqq132555/skills
cocos-creator-3x-cn
提供 Cocos Creator 3.8 游戏引擎的全面开发指导,包括组件系统(_decorator、Component)、生命周期回调、事件系统(EventTarget、input)、resources 资源管理、tween 缓动系统、对象池、UI 系统、物理碰撞以及可试玩广告优化。在用户编写或重构 Cocos Creator 3.x TypeScript 代码、实现游戏功能、处理资源加载与释放、优化性能/包体大小、审查代码变更、搭建可试玩广告项目架构时触发。也适用于用户提到 import from 'cc'、Component、Node、resources、tween、director 等 3.x API 时使用。
205skill-creator-cn
创建新技能、修改和改进现有技能、衡量技能性能。当用户希望从零开始创建技能、更新或优化现有技能、运行评估测试技能、通过方差分析进行性能基准测试、或优化技能描述以提升触发准确性时使用此技能。
9find-skills-cn
帮助用户在提出诸如“如何做 X”、“寻找处理 X 的技能”、“是否有能够……的技能”之类的问题,或者表达出想要扩展功能的意愿时,发现并安装相应的代理技能。当用户正在寻找可能以可安装技能形式存在的功能时,应使用此技能。
4cocos-creator-2x-cn
提供 Cocos Creator 2.4 游戏引擎的全面开发指导,包括组件系统(cc.Class、cc._decorator)、生命周期回调、事件系统、Asset Manager 资源管理、缓动/动作系统、对象池、UI 系统、物理碰撞以及可试玩广告优化。在用户编写或重构 Cocos Creator 2.x TypeScript/JavaScript 代码、实现游戏功能、处理资源加载与释放、优化性能/包体大小、审查代码变更、搭建可试玩广告项目架构时触发。也适用于用户提到 cc.Class、cc.Component、cc.Node、cc.resources、cc.assetManager、cc.tween 等 2.x API 时使用。
4layaair-3x-cn
提供 LayaAir 3.x 游戏引擎的全面开发指导,包括 ECS 组件系统(@regClass/@property 装饰器、Script 生命周期)、事件系统(EventDispatcher、鼠标/键盘/物理事件)、Promise 异步资源加载(Laya.loader.load)、全新 Tween 缓动系统(chain/parallel)、Timer 定时器、对象池(Laya.Pool)、2D/3D 显示对象、UI 组件系统、场景管理(Scene.open/close)、2D/3D 物理系统、屏幕适配及性能优化。当用户编写或重构 LayaAir 3.x TypeScript 代码、实现脚本组件、处理事件监听、资源加载、缓动动画、性能优化及可试玩广告项目时触发。也适用于提到 @regClass、@property、Laya.Script、Laya.loader.load(Promise)、Laya.Tween.create、Laya.Scene.open、Laya.Pool、Sprite3D、Camera 等 LayaAir 3.x API 时使用。即使用户只是提到 LayaAir、Laya 引擎或 .ls 场景文件也应触发此技能。
3layaair-2x-cn
提供 LayaAir 2.0 游戏引擎的全面开发指导,包括脚本组件系统(Script/Component 生命周期)、EventDispatcher 事件系统、Laya.loader 资源加载、Tween 缓动、Timer 定时器、显示对象(Sprite/Text/Image)、UI 系统以及可试玩广告优化。当用户编写或重构 LayaAir 2.0 TypeScript 代码、实现脚本组件、处理事件监听、资源加载、缓动动画、性能优化及可试玩广告项目时触发。也适用于提到 Laya.init、Laya.stage、Laya.loader、Laya.Tween、laya.display.Sprite、laya.utils.Handler、laya.events.EventDispatcher 等 LayaAir 2.x API 时使用。
2