代码审查与 PR 类 Skills
High Contrast
Dark Mode
Light Mode
Sepia
Forest
4 min read765 words

代码审查与 PR 类 Skills

这一节提供两个完整的、可以直接复用的 Skill 实现:全面代码审查 Skill 和 PR 描述自动生成 Skill。每个 Skill 都经过设计,覆盖常见的工程场景,可以直接复制到你的 .claude/skills/ 目录使用。


Skill 1:/review-pr — 全面代码审查

场景:每次 PR 提交前,对代码变更进行系统性审查,输出结构化的问题列表和改进建议。

文件:.claude/skills/code-review/review-pr.md

---
description: 对指定分支或当前分支的代码变更进行全面审查,输出结构化审查报告
allowed-tools: Bash, Read, Grep
---
# PR 代码审查
## 目标
对指定分支相对于主分支(main/master)的代码变更进行全面审查。
关注点:安全漏洞、错误处理、代码质量、测试覆盖。
输出标准格式的审查报告,适合直接贴入 PR 评论。
## 参数说明(来自 $ARGUMENTS)
| 参数 | 必填 | 默认值 | 说明 |
|------|------|--------|------|
| `--branch` | 否 | 当前 git 分支 | 要审查的功能分支名 |
| `--base` | 否 | `main` | 对比的基础分支(如 `develop`、`master`)|
| `--focus` | 否 | `all` | 审查重点:`security`/`performance`/`quality`/`all` |
**调用示例**:

/review-pr /review-pr --branch feature/payment-gateway /review-pr --branch feature/auth --focus security /review-pr --branch hotfix/login --base develop


## 执行步骤
### 步骤 1:初始化
1. 解析参数:
- `--branch`:如未提供,运行 `git branch --show-current` 获取当前分支
- `--base`:默认 `main`,如未找到 main,尝试 `master`
- `--focus`:默认 `all`
2. 验证基础分支存在:
- 运行 `git branch -a | grep {base}`
- 如果不存在,提示"基础分支 {base} 不存在,请用 --base 指定正确的分支名"
### 步骤 2:获取变更信息
3. 运行:`git diff {base}...{branch} --name-only`
- 获取修改的文件列表
- 如果输出为空,提示"未发现相对于 {base} 的变更"并停止
4. 运行:`git diff {base}...{branch} --stat`
- 获取修改的行数统计
5. 运行:`git log {base}...{branch} --oneline`
- 获取本 PR 包含的 commit 列表
### 步骤 3:读取变更内容
6. 运行:`git diff {base}...{branch}`
- 获取完整的 diff 内容
- 如果 diff 超过 10,000 行,只分析最重要的文件(按修改行数降序排列,取前 10 个)
### 步骤 4:代码审查
根据 `--focus` 参数执行对应的审查:
**`security`(或 `all` 中的安全部分)**:
- 检查 SQL 注入风险(字符串拼接 SQL)
- 检查硬编码密钥(password、secret、api_key 等词附近的字符串常量)
- 检查不安全的 HTTP(硬编码的 http://URL)
- 检查不安全的序列化(eval、exec 直接处理用户输入)
- 检查 XSS 风险(直接向 DOM 插入未经转义的用户输入)
**`quality`(或 `all` 中的质量部分)**:
- 检查过长的函数(超过 80 行)
- 检查复杂的条件嵌套(超过 3 层)
- 检查魔法数字(未命名的数字常量)
- 检查重复代码(类似的代码块出现多次)
- 检查是否有充分的错误处理(try/catch 或错误返回值)
**`performance`(或 `all` 中的性能部分)**:
- 检查循环中的数据库查询(N+1 问题的迹象)
- 检查在热路径上的同步阻塞操作
- 检查不必要的数组/对象展开(`...spread` 在大型集合上)
### 步骤 5:输出报告
## 输出格式

代码审查报告

分支:{branch} → {base} 提交数:N 个 修改文件:N 个(+N 行,-N 行)


🔴 严重问题(必须修复)

这些问题可能导致安全漏洞或数据损失

(如无严重问题,写:✅ 未发现严重问题)


🟡 改进建议(强烈建议)

这些问题影响代码质量或可能引起潜在问题

(如无改进建议,写:✅ 代码质量良好)


🟢 可选优化

这些是锦上添花的改进,不影响合并


📋 总结

提交信息: [列出主要的 commit,1–3 条]

总体评估:[一句话总结]

建议:[✅ 可以合并] 或 [⚠️ 建议修复后合并] 或 [❌ 需要重大修改]


---
**为什么用 Skill 而不是直接输入提示词**:每次 PR 审查都需要相同的质量标准、相同的输出格式、相同的检查范围。封装成 Skill 后,全团队所有人的代码审查标准一致,不因操作者不同而有差异。
---
## Skill 2:/gen-pr-desc — PR 描述自动生成
**场景**:提交 PR 时,自动基于代码变更生成符合团队规范的 PR 描述草稿。
### 文件:`.claude/skills/docs/gen-pr-desc.md`
```markdown
---
description: 基于 git diff 自动生成 PR 描述草稿(符合团队模板格式)
allowed-tools: Bash, Read
---
# PR 描述生成器
## 目标
读取当前分支相对于主分支的代码变更,自动生成一份符合团队 PR 描述规范的草稿。
输出可以直接复制到 GitHub/GitLab 的 PR 描述中(可能需要微调)。
## 参数说明(来自 $ARGUMENTS)
| 参数 | 必填 | 默认值 | 说明 |
|------|------|--------|------|
| `--base` | 否 | `main` | 对比的基础分支 |
| `--type` | 否 | 自动判断 | PR 类型:`feat`/`fix`/`refactor`/`docs`/`chore` |
## 执行步骤
1. 获取当前分支名:`git branch --show-current`
2. 获取变更摘要:
- `git diff {base}... --name-only`(变更文件列表)
- `git log {base}... --oneline`(commit 列表)
- `git diff {base}... --stat`(变更统计)
3. 如果提供了 `--type`,使用该值;否则根据 commit 消息自动判断 PR 类型:
- 大多数 commit 以 `feat:` 开头 → `Feature`
- 大多数 commit 以 `fix:` 开头 → `Bug Fix`
- 大多数 commit 以 `refactor:` 开头 → `Refactor`
- 其他 → `Chore/Maintenance`
4. 读取 `.github/pull_request_template.md`(如果存在),以团队模板为基础生成描述
5. 基于变更内容,填写 PR 描述的各部分
## 输出格式
输出可以直接粘贴的 PR 描述(Markdown 格式):

Summary

[2–3 句话说明这个 PR 做了什么,解决了什么问题]

Changes

Type of Change

Testing

Test scenario: [说明主要测试的场景]

Impact

Files changed: N files (+N/-N lines) Breaking changes: None / [说明 breaking change 内容] Database changes: None / [说明迁移内容]

Checklist


---
注意:以上输出是草稿,请根据实际情况修改"Testing"和"Impact"部分,确保信息准确。

本节记录清单


下一节运维与部署类 Skills——部署前检查、数据库迁移验证、回滚评估——把这些高风险操作的前置检查自动化。