名称: code-review 描述: 根据项目指南审查更改或拉取请求 允许工具: 读取, 写入, Grep, Glob, Bash
代码审查
根据项目指南审查本地更改或拉取请求。所有输出都写入本地 — 从不发布到 GitHub。
参数
/code-review [target] [--output path]
目标(可选)
指定要审查的内容。可以是:
- 无 - 自动检测当前分支相对于主分支的新提交(默认)
- 提交范围 - 审查特定提交(例如,
HEAD~3..HEAD,abc123..def456) - 单个提交 - 审查一个提交(例如,
HEAD~1,abc123) - 分支比较 - 审查分支差异(例如,
main..feature/foo) - PR 编号 - 审查拉取请求(例如,
#123或123)
输出(可选)
--output path 或 -o path - 审查报告写入位置:
- 在
.ai/内的文件夹名称(例如,issue-59-add-no-verify-option) - 相对路径(例如,
.ai/issue-59-add-no-verify-option) - 如果在自动检测模式下省略:根据分支名称自动检测,写入到
.ai/ - 如果在显式目标下省略:直接输出到对话(无文件)
- 如果在 PR 模式下省略:自动保存到
.ai/(见步骤 6)
示例
# 自动检测新提交相对于主分支(写入到 .ai/)
/code-review
# 自动检测,指定输出文件夹
/code-review --output issue-59-add-no-verify-option
/code-review -o .ai/my-feature
# 审查特定提交(输出到对话)
/code-review HEAD~3..HEAD
/code-review abc123
/code-review main..feature/foo
# 审查提交并保存到文件
/code-review HEAD~5..HEAD --output code-audit
# 审查拉取请求(自动保存到 .ai/)
/code-review #123
/code-review 123
指令
-
解析参数
- 检查是否提供了提交/范围目标
- 检查目标是否为 PR 编号(
#123或纯123且不是有效的 git 引用) - 检查是否提供了
--output或-o标志 - 确定审查模式:“自动检测”(默认)、“显式”或“pr”
-
收集上下文
对于 自动检测模式(未指定目标):
- 获取当前分支名称
- 在
.ai/中找到关联的工作流程文件夹 - 读取原始问题/概念和计划(如果可用)
对于 显式模式(指定提交/范围目标):
- 验证提交范围/引用是否存在
- 无需查找工作流程文件夹
对于 PR 模式(指定 PR 编号):
- 获取 PR 元数据:
gh pr view <number> --json title,author,baseRefName,headRefName,headRefOid,number - 无需查找工作流程文件夹
-
检测和获取更改
对于 自动检测模式:
- 确定主分支:运行
git config gitflow.branch.main.name(回退到main) - 检测新提交:运行
git log <main>..HEAD --oneline - 如果无新提交,通知用户并停止
- 获取这些提交的差异:
git diff <main>...HEAD - 列出正在审查的提交
对于 显式模式:
- 如果范围(包含
..):git diff <range>和git log <range> --oneline - 如果单个提交:
git show <commit> --stat和git log -1 <commit>
对于 PR 模式:
- 获取完整差异:
gh pr diff <number> - 获取提交列表:
gh pr view <number> --json commits --jq '.commits[].oid' - 列出差异中的所有修改文件
对于所有模式:
- 列出所有修改文件
- 确定主分支:运行
-
根据指南审查
根据 REVIEW_CRITERIA.md 审查代码,该文件涵盖:
- 测试覆盖率
- 编码指南和架构
- 代码质量
- 安全性
- 文档
- 提交消息
-
代码质量检查(仅自动检测模式)
跳过此步骤用于显式模式(审查历史提交)和 PR 模式。
对于自动检测模式,运行:
# 格式检查 go fmt ./... # Vet 检查 go vet ./... -
确定输出位置
文件名包括正在审查的修订:
# 对于自动检测模式:使用 HEAD 短 SHA HEAD_SHA=$(git rev-parse --short HEAD) FILENAME="review-${HEAD_SHA}.md" # 对于提交范围 (abc123..def456):使用两端点 START_SHA=$(git rev-parse --short abc123) END_SHA=$(git rev-parse --short def456) FILENAME="review-${START_SHA}-${END_SHA}.md" # 对于单个提交:使用该提交的短 SHA COMMIT_SHA=$(git rev-parse --short abc123) FILENAME="review-${COMMIT_SHA}.md" # 对于 PR 模式:使用 PR 编号和头 SHA HEAD_SHA=$(gh pr view <number> --json headRefOid --jq '.headRefOid' | cut -c1-7) FILENAME="review-pr<number>-${HEAD_SHA}.md"如果提供了
--output/-o:- 如果以
.ai/开头,直接使用 - 否则,将其视为
.ai/内的文件夹名称(前置.ai/) - 创建文件夹(如果不存在)
- 写入到
<folder>/<filename>
如果无
--output且 自动检测模式:- 从分支名称提取问题编号(例如,
feature/59-...→59) - 查找现有的
.ai/issue-<number>-*文件夹 - 如果无
.ai/文件夹存在,根据分支名称模式创建 - 写入到
<folder>/<filename>
如果无
--output且 PR 模式:- 尽可能从 PR 分支名称提取问题编号
- 查找现有的
.ai/issue-<number>-*文件夹 - 回退到
.ai/pr-<number>/ - 写入到
<folder>/<filename>
如果无
--output且 显式模式:- 直接输出到对话(无文件写入)
示例:
- 自动检测在 HEAD
c9625f7→.ai/issue-59-foo/review-c9625f7.md - 范围
abc123..def456带-o issue-59-foo→.ai/issue-59-foo/review-abc123-def456.md - 单个提交
abc123带-o .ai/my-feature→.ai/my-feature/review-abc123.md - PR
#60在头a1b2c3d→.ai/issue-59-foo/review-pr60-a1b2c3d.md - 显式模式,无标志 → 输出到对话(无文件)
- 如果以
-
生成审查报告
根据步骤 6 将审查写入文件或直接输出到对话。
使用此格式:
# 代码审查:<分支名称、提交范围或 PR #编号> ## 摘要 - 修订:`<开始-sha>` 到 `<结束-sha>`(或单个 `<sha>`) - 修改文件:<数量> - 添加行数:<数量> - 删除行数:<数量> - 审查提交:<数量>(列出提交 SHA/主题)对于 PR 模式,添加 PR 元数据到摘要:
- PR: #<编号> - <标题> - 作者: <作者> - 基础: <基础分支> ← <头分支>然后继续:
## 清单结果 ### 通过 - <项目 1> - <项目 2> ### 必须修复 - [ ] <问题 1> - <文件:行> - <描述> - [ ] <问题 2> - <文件:行> - <描述> ### 应该修复 - <项目 1> ## 质量检查(仅自动检测模式) - 格式:通过/失败 - Vet:通过/失败 ## 建议 1. <建议> 2. <建议> ## 准备好 PR 了吗?(仅自动检测模式) <是/否 - 如果否,解释原因>对于显式和 PR 模式,省略“质量检查”和“准备好 PR 了吗?”部分。
-
报告发现
- 如果发现问题,列出具体文件:行引用
- 为每个问题建议修复
- 对于自动检测模式:指示更改是否准备好 PR
- 对于显式和 PR 模式:直接在对话中提供代码审查反馈
问题类别
使用 REVIEW_CRITERIA.md 中定义的严重性级别(必须修复、应该修复、微调)分类发现。