代码审查Skill:自动PR审查与质量反馈

自动化Pull Request代码审查

一、代码审查Skill的设计目标

在团队协作开发中,代码审查是保障代码质量的核心环节,但传统人工审查面临着时间成本高、标准不统一、容易遗漏细节等诸多挑战。通过创建代码审查Skill,可以将常规化的审查工作自动化,帮助团队更高效地发现潜在问题。

代码审查Skill的设计目标包括以下几个方面:

核心价值:代码审查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并非一次配置就一劳永逸。在实际使用过程中,需要根据反馈不断调试和优化。

调试技巧

迭代优化路线图

## 迭代路线图 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需要持续迭代优化,通过误报和漏报分析不断改进审查质量。