一、代码审查Skill的设计目标
在团队协作开发中,代码审查是保障代码质量的核心环节,但传统人工审查面临着时间成本高、标准不统一、容易遗漏细节等诸多挑战。通过创建代码审查Skill,可以将常规化的审查工作自动化,帮助团队更高效地发现潜在问题。
代码审查Skill的设计目标包括以下几个方面:
- 自动化常规代码审查:自动检测常见的代码问题,如逻辑错误、性能瓶颈、安全漏洞等,减少人工逐行检查的重复劳动。
- 减少人工审查负担:让审查者从繁琐的格式化检查中解放出来,专注于高层次的架构设计和业务逻辑合理性评估。
- 标准化审查标准和流程:确保所有Pull Request都按照统一的维度、标准和严重程度分级进行审查,消除审查者个人偏好导致的评价标准差异。
- 快速发现潜在问题:在代码合并之前及时捕获问题,降低缺陷流入生产环境的概率,缩短反馈循环。
核心价值:代码审查Skill不是取代人工审查,而是通过自动化手段提升审查效率和质量,让团队在更短的时间内完成更高质量的代码审查工作。
效率提升
自动化检查常见问题,人工只需关注高阶审查,整体审查时间可缩短50%以上。
标准统一
所有PR使用相同的审查维度和评分标准,消除个人偏好的影响。
知识沉淀
团队编码规约和经验教训可以直接编码到Skill的prompt中,持续积累。
即时反馈
提交PR后可立即获得审查结果,开发者无需等待人工审查排期。
二、Skill的prompt设计
prompt是代码审查Skill的核心。一个好的审查prompt需要明确定义审查维度、严重程度分级、输出格式以及团队特定的编码规约引用。以下是一个完整的代码审查Skill定义示例:
# 代码审查Skill定义
- name: 代码审查
command: review
prompt: |
请严格审查以下代码变更,关注:
1. 功能正确性:逻辑是否有误?
2. 性能问题:是否有性能隐患?
3. 安全漏洞:是否存在安全问题?
4. 代码风格:是否符合{{1}}编码规范?
5. 可维护性:代码是否易于理解和维护?
Git Diff:
{{FILE:diff.txt}}
审查维度定义
审查维度决定了Skill的关注范围。在实际配置中,建议根据团队和项目的具体情况,选择以下维度的子集:
| 维度 |
说明 |
检查要点 |
| 功能正确性 |
代码逻辑是否按预期工作 |
边界条件、状态转换、异常流程、算法正确性 |
| 性能问题 |
是否存在性能瓶颈 |
不必要的循环、内存泄漏、数据库查询优化、缓存策略 |
| 安全漏洞 |
潜在的安全风险 |
SQL注入、XSS、CSRF、敏感信息泄露、输入验证 |
| 代码风格 |
是否符合编码规范 |
命名约定、缩进、注释规范、代码组织结构 |
| 可维护性 |
代码是否易于理解 |
函数长度、职责单一原则、测试覆盖率、文档完整性 |
严重程度分级
为了让审查结果更加直观,需要定义问题的严重程度分级。不同的团队可以根据实际情况调整分级标准:
| 级别 |
标签 |
定义 |
处理要求 |
| P0 |
阻塞 |
导致功能错误、安全漏洞或性能严重退化 |
必须修复后才能合并 |
| P1 |
重要 |
可能导致潜在问题或明显降低代码质量 |
建议修复,可讨论替代方案 |
| P2 |
建议 |
风格改进、可读性提升、最佳实践推荐 |
可选择性采纳,不阻塞合并 |
三、集成Git diff获取变更内容
代码审查的前提是获取准确的代码变更内容。Skill通过集成Git diff能力来实现这一目标,常见的方式包括:
方式一:与Git MCP配合
通过Git MCP(Model Context Protocol)工具直接获取当前分支的diff内容。这种方式无需手动准备文件,Skill可以自动调用Git命令来获取变更集。例如,在prompt中使用MCP工具获取当前分支与目标分支之间的差异:
# Git MCP集成示例
- name: 审查当前分支
command: review-branch
prompt: |
请审查当前分支与main分支的差异。
关注所有修改的文件,特别注意新增的公共API和数据库变更。
使用Git MCP获取完整的diff信息。
方式二:读取diff文件
通过{{FILE:diff.txt}}通配符读取预先生成的diff文件。这种方式更加灵活,可以在调用Skill之前对diff进行预处理,例如过滤掉非关键文件、合并多个commit的变更等:
# 生成diff并触发审查
$ git diff origin/main...HEAD > diff.txt
$ claude review --skill 代码审查
最佳实践:建议在调用Skill之前对diff进行预处理——过滤掉package-lock.json、yarn.lock等自动生成的文件,以及dist/、build/等构建产物目录,将审查焦点集中在真正需要关注的核心代码上。
限定审查范围
在prompt中可以明确指定需要重点关注的目录或文件类型,从而缩小审查范围、提升审查精度:
# 限定审查范围
请仅审查以下目录的变更:
- src/ (核心业务逻辑)
- api/ (API接口定义)
- tests/ (测试代码)
跳过以下目录:
- node_modules/
- dist/
- *.config.js
四、审查结果格式化输出
审查结果的呈现方式直接影响开发者的处理效率。一个好的格式化输出应该让问题一目了然,方便开发者快速定位和处理。
严重程度标签
使用emoji标签配合文字,让严重程度在视觉上立刻区分:
- 🔴 阻塞:必须修复的严重问题,不修复则不应合并
- 🟡 重要:应该修复的中等问题,建议在合并前处理
- 🔵 建议:可选的改进建议,不影响合并决策
按文件分类组织
审查结果按文件路径分组,每个文件下列出该文件中发现的所有问题。这种组织方式便于开发者按文件逐一处理:
## 审查结果
### 📄 src/services/user-service.ts
🔴 [阻塞] 第42行:空指针风险
变量 `user.profile` 在未判空的情况下直接访问 `name` 属性。
建议:添加空值检查 `user?.profile?.name`
🟡 [重要] 第78行:未处理异常
`fetchUserData` 调用未使用 try-catch 包裹,异常会直接冒泡到上层。
建议:添加错误处理逻辑
🔵 [建议] 第15行:接口命名
`getData` 命名过于泛化,建议改为更具描述性的名称如 `getUserProfile`。
### 📄 src/api/route-handler.ts
🔴 [阻塞] 第23行:SQL注入风险
使用字符串拼接构造SQL查询,存在注入风险。
建议:改用参数化查询或ORM
可操作的修复方案
每个审查发现的问题都应该附带具体的修复建议,而不是仅仅指出问题。这样可以极大降低开发者的修复成本:
好的审查反馈 = 问题定位 + 问题原因 + 修复建议 + (可选)代码示例
输出格式要点:
1. 每个问题包含文件名和行号,方便快速定位
2. 严重程度标签清晰可见,区分优先级
3. 附带具体的修复建议或代码示例
4. 同类问题合并归类,避免重复噪音
5. 在审查结果末尾提供总体评价摘要
五、团队编码规约绑定
每个团队都有自己的编码约定和最佳实践。将这些规约绑定到代码审查Skill中,可以确保审查结果与团队的实际情况保持一致。
在CLAUDE.md中定义编码规范
CLAUDE.md是项目的知识库文件,可以在其中定义团队的编码规约。审查Skill会自动读取CLAUDE.md中的规范内容并应用到审查过程中:
# CLAUDE.md 编码规约示例
## TypeScript编码规范
- 使用interface而非type定义对象类型
- 函数参数超过3个时使用options对象
- 禁止使用any类型,使用unknown替代
- 异步函数必须显式声明返回类型Promise<T>
## React规范
- 组件使用函数组件 + Hooks
- 避免在useEffect中直接修改state
- 大型组件拆分为多个小组件
- Props使用interface定义并导出
引用外部规约文件
除了CLAUDE.md,审查Skill还可以通过{{FILE:CODING_STANDARDS.md}}的方式引用独立的编码规约文件。这种方式适合规约内容较多、需要单独维护的场景:
# Skill prompt中引用外部规约
请根据以下编码规约审查代码变更:
{{FILE:CODING_STANDARDS.md}}
同时参考项目根目录的 CLAUDE.md 中的规范说明。
Git Diff:
{{FILE:diff.txt}}
自动适配项目代码风格
更高级的做法是让Skill自动分析项目中已有的代码风格——读取项目中已有的配置文件(如.eslintrc、.prettierrc、tsconfig.json等),从中推断出团队的实际编码约定,并以此为标准进行审查:
# 自动适配项目配置
请读取项目中的以下配置文件,自动识别编码规范:
- .eslintrc.js (ESLint规则)
- .prettierrc (格式化配置)
- tsconfig.json (TypeScript配置)
- .editorconfig (编辑器配置)
结合这些配置对代码变更进行审查,确保新代码与现有代码风格保持一致。
注意事项:编码规约绑定虽然强大,但也要注意不要过度约束。过于严格的规约可能会导致开发者产生对抗情绪。建议从最关键的规约开始,逐步补充和调整。
六、不同语言的审查要点配置
不同的编程语言和框架有不同的最佳实践和常见陷阱。代码审查Skill应该针对具体的技术栈配置相应的审查要点。
| 语言/框架 |
重点审查维度 |
常见问题 |
| TypeScript/JavaScript |
类型安全、异步处理、闭包陷阱 |
any滥用、Promise未处理、内存泄漏 |
| React |
组件设计、Hooks规则、性能优化 |
缺少依赖数组、不必要的重渲染、状态提升不当 |
| Python |
异常处理、性能、导入规范 |
全局变量、循环引用、未关闭的资源 |
| Go |
错误处理、并发安全、接口设计 |
错误被忽略、goroutine泄漏、锁使用不当 |
| Java/Spring |
依赖注入、事务管理、异常体系 |
空指针、事务边界过大、N+1查询 |
七、Skill的调试与迭代优化
代码审查Skill并非一次配置就一劳永逸。在实际使用过程中,需要根据反馈不断调试和优化。
调试技巧
- 审查样本测试:用已知有问题的代码变更来测试Skill是否能正确发现问题
- 误报分析:记录Skill报告的false positive(误报),分析原因并调整prompt
- 漏报分析:记录遗漏的重要问题,补充对应的审查规则
- 逐步扩大范围:先在单个项目上验证效果,再推广到更多项目
迭代优化路线图
## 迭代路线图
Phase 1: 基础审查能力
- 实现5大维度的基础审查
- 支持Git diff集成
- 格式化输出结果
Phase 2: 团队定制化
- 绑定CLAUDE.md编码规约
- 支持外部规约文件引用
- 按语言配置审查要点
Phase 3: 深度集成
- 自动适配项目配置
- 历史审查记录分析
- 质量趋势报告生成
核心要点总结:
1. 代码审查Skill的核心在于精心设计的prompt,需要明确定义审查维度和严重程度分级。
2. Git diff集成是获取审查素材的基础,建议与Git MCP配合使用或通过{{FILE:}}方式读取diff文件。
3. 审查结果应使用严重程度标签(🔴阻塞/🟡重要/🔵建议)并按文件分类组织,附带可操作的修复建议。
4. 团队编码规约通过CLAUDE.md或独立的CODING_STANDARDS.md文件绑定到Skill中,确保审查标准与团队一致。
5. 不同编程语言和框架需要配置不同的审查要点,Skill应具备语言感知能力。
6. 代码审查Skill需要持续迭代优化,通过误报和漏报分析不断改进审查质量。