AI 代码审查
AI 代码审查是 Git Workflow 的核心功能之一,使用 AI 对代码变更进行智能审查,生成详细的 Markdown 审查报告。
🎯 功能特点
- 智能分析 - AI 自动分析代码变更,识别潜在问题
- 多维度审查 - 覆盖代码质量、安全、性能、最佳实践等维度
- 详细报告 - 生成结构化的 Markdown 审查报告
- 灵活选择 - 支持审查暂存区、指定 commit 或交互式选择
🚀 快速开始
bash
# 交互式选择要审查的 commits
gw review
# 审查指定的 commit
gw review abc1234
# 审查多个 commits
gw review abc1234 def5678
# 审查 commit 范围(包含 abc1234 和 def5678 的所有 commits)
gw review abc1234..def5678
# 审查最近 N 个 commits
gw review -n 3
# 审查暂存区的更改
gw review -s📊 审查维度
AI 会从以下维度进行代码审查:
| 维度 | 说明 | 示例 |
|---|---|---|
| 代码质量 | 可读性、可维护性、代码风格 | 命名规范、函数长度、注释完整性 |
| 潜在 Bug | 空指针、边界条件、异常处理 | 未处理的 null、数组越界 |
| 安全问题 | SQL 注入、XSS、敏感信息泄露 | 硬编码密码、未转义输入 |
| 性能问题 | 不必要的循环、内存泄漏、重复计算 | N+1 查询、大数组遍历 |
| 最佳实践 | 设计模式、SOLID 原则、DRY 原则 | 代码重复、职责不清 |
🔴🟡🔵 问题严重程度
审查报告会按严重程度对问题进行分类:
- 🔴 严重 - 必须修复的问题(安全漏洞、严重 Bug)
- 🟡 警告 - 建议修复的问题(潜在 Bug、性能问题)
- 🔵 建议 - 可选的改进(代码风格、最佳实践)
📝 审查报告
审查报告会保存在 .gw-reviews/ 目录下,包含:
- 变更统计 - 文件数、新增行数、删除行数
- 审查的提交 - 相关 commit 信息
- AI 审查结果
- 概述 - 变更内容和整体评价
- 问题列表 - 按严重程度分类
- 改进建议 - 具体的代码改进建议
- 亮点 - 代码中写得好的地方
报告示例
markdown
# 🔍 代码审查报告
> 生成时间: 2024/1/20 10:30:00
## 📊 变更统计
| 指标 | 数值 |
|------|------|
| 文件数 | 3 |
| 新增行 | +45 |
| 删除行 | -12 |
## 🤖 AI 审查结果
### 概述
本次变更主要添加了用户登录功能,整体代码质量良好...
### 问题列表
🔴 **严重问题**
1. `src/auth.ts:25` - 密码未加密存储
🟡 **警告**
1. `src/login.ts:42` - 缺少输入验证
🔵 **建议**
1. `src/utils.ts:18` - 建议使用 const 替代 let⚙️ 配置
AI 审查使用与 AI Commit 相同的配置:
json
{
"aiCommit": {
"enabled": true,
"provider": "github",
"apiKey": "your-api-key",
"model": "gpt-4o",
"language": "zh-CN"
}
}支持的 AI 提供商
| 提供商 | 默认模型 | 说明 |
|---|---|---|
github | gpt-4o | GitHub Models(推荐,免费) |
openai | gpt-4o | OpenAI API |
claude | claude-3-5-sonnet | Anthropic Claude |
ollama | qwen2.5-coder:14b | 本地 Ollama(离线可用) |
💡 使用技巧
1. 提交前审查
在提交代码前,先审查暂存区的更改:
bash
git add .
gw review -s
# 根据审查结果修改代码
gw c2. Code Review 辅助
在进行代码审查时,先用 AI 审查相关 commits:
bash
# 审查某个 PR 的所有 commits
gw review abc1234 def5678 ghi9012
# 或使用范围语法审查从 abc1234 到 def5678 的所有 commits(包含两端)
gw review abc1234..def56783. 定期代码审计
定期审查最近的提交,发现潜在问题:
bash
# 审查最近 10 个 commits
gw review -n 10📋 命令参考
详细的命令选项请参考 review 命令文档。