---
name: gitlink-code-review
version: 1.0.0
description: "智能代码审查：自动分析 PR 代码变更，进行多维度代码质量检查，生成结构化审查报告并自动添加评论。当用户需要对 GitLink PR 进行代码审查时触发。"
metadata:
  requires:
    bins: ["gitlink-cli"]
  cliHelp: "gitlink-cli pr --help"
---

# gitlink-code-review（智能代码审查）

> **前置条件：** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 和 [`../gitlink-pr/SKILL.md`](../gitlink-pr/SKILL.md)

**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`（GitHub CLI）操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。**

本技能提供 AI 驱动的自动化代码审查功能，帮助开发者和 Reviewers 快速分析 PR 代码质量。

## 🎯 核心功能

| 功能 | 说明 | 需要认证 |
|------|------|----------|
| `代码变更分析` | 获取 PR 的文件列表和 diff 内容 | 否（公开项目） |
| `代码质量检查` | 检查代码复杂度、命名规范、注释完整性 | 否 |
| `安全性检查` | 检查 SQL 注入、XSS、敏感信息泄露等 | 否 |
| `性能检查` | 识别性能反模式和资源泄漏 | 否 |
| `可维护性检查` | 检查代码重复和职责单一原则 | 否 |
| `审查报告生成` | 生成结构化的审查报告（JSON/Markdown） | 否 |
| `自动评论` | 将审查意见自动添加为 PR 评论 | 是 |

## 📊 审查维度

### 1. 代码质量（Code Quality）

检查项：
- **代码复杂度**：圈复杂度、嵌套层级、函数长度
- **命名规范**：变量/函数/类的命名是否清晰
- **注释完整性**：复杂逻辑是否有注释说明
- **代码格式**：缩进、空行、代码组织

### 2. 安全性（Security）

检查项：
- **SQL 注入**：字符串拼接 SQL 语句
- **XSS 漏洞**：未转义的用户输入输出
- **敏感信息**：硬编码的密码/密钥/Token
- **认证问题**：权限检查、会话管理
- **输入验证**：用户输入是否充分验证

### 3. 性能（Performance）

检查项：
- **循环效率**：嵌套循环、大循环中的重复计算
- **资源泄漏**：未关闭的连接/文件/流
- **数据库查询**：N+1 查询、缺少索引
- **内存使用**：大对象复制、内存泄漏

### 4. 可维护性（Maintainability）

检查项：
- **代码重复**：重复的代码片段
- **职责单一**：函数/类的职责是否明确
- **依赖耦合**：模块间的耦合度
- **测试覆盖**：是否缺少测试

## 🔧 使用方式

### 方式一：交互式审查（推荐）

```bash
# 1. 获取 PR 详情
gitlink-cli pr +view --id <pr_id> --format json

# 2. 获取变更文件列表
gitlink-cli pr +files --id <pr_id> --format json

# 3. 获取 diff 内容
gitlink-cli pr +diff --id <pr_id> --format json

# 4. AI 分析代码并生成审查报告（手动或自动）
# 5. （可选）添加审查评论
gitlink-cli api POST /:owner/:repo/pulls/:id/reviews --body '{"body":"审查意见...","event":"COMMENT"}'
```

### 方式二：完整审查工作流

详见 [`examples/comprehensive-review-workflow.md`](examples/comprehensive-review-workflow.md)

## 📝 审查报告格式

### JSON 格式（AI 解析）

```json
{
  "pr_id": 123,
  "owner": "myuser",
  "repo": "myrepo",
  "title": "Feature: Add user authentication",
  "analysis_timestamp": "2026-06-12T10:30:00Z",
  "files_changed": 5,
  "lines_added": 150,
  "lines_removed": 50,
  "review_summary": {
    "overall_score": 85,
    "quality_score": 90,
    "security_score": 75,
    "performance_score": 80,
    "maintainability_score": 85
  },
  "issues_found": [
    {
      "file": "src/auth/login.go",
      "line": 45,
      "severity": "HIGH",
      "category": "security",
      "rule": "敏感信息泄露",
      "description": "硬编码的密钥不应出现在代码中",
      "suggestion": "使用环境变量或配置文件存储密钥"
    },
    {
      "file": "src/auth/login.go",
      "line": 78,
      "severity": "MEDIUM",
      "category": "performance",
      "rule": "资源泄漏",
      "description": "数据库连接未关闭",
      "suggestion": "使用 defer 确保连接关闭"
    }
  ],
  "positive_notes": [
    {
      "file": "src/auth/user.go",
      "line": "120,
      "description": "优秀的错误处理"
    }
  ],
  "recommendations": [
    "建议添加单元测试覆盖登录逻辑",
    "建议使用参数化查询防止 SQL 注入"
  ]
}
```

### Markdown 格式（人类阅读）

```markdown
# 代码审查报告

## PR 信息
- **PR ID**: 123
- **标题**: Feature: Add user authentication
- **作者**: @developer
- **变更文件**: 5 个文件
- **代码行**: +150 / -50

## 总体评分: 85/100 ⭐⭐⭐⭐

- 代码质量: 90/100
- 安全性: 75/100 ⚠️
- 性能: 80/100
- 可维护性: 85/100

## 🔴 高优先级问题（2）

### 1. 敏感信息泄露
- **文件**: `src/auth/login.go:45`
- **类别**: security
- **问题**: 硬编码的密钥不应出现在代码中
- **建议**: 使用环境变量或配置文件存储密钥

### 2. 资源泄漏
- **文件**: `src/auth/login.go:78`
- **类别**: performance
- **问题**: 数据库连接未关闭
- **建议**: 使用 defer 确保连接关闭

## ⭐ 优秀实践（1）

### 1. 优秀的错误处理
- **文件**: `src/auth/user.go:120`
- **描述**: 完善的错误处理和日志记录

## 💡 改进建议

1. 建议添加单元测试覆盖登录逻辑
2. 建议使用参数化查询防止 SQL 注入
3. 建议添加输入验证中间件

## 📊 详细分析

[详细的逐文件分析...]
```

## 🤖 AI Agent 使用

AI Agent 可以通过以下步骤自动审查 PR：

1. **获取 PR 信息**
   ```bash
   gitlink-cli pr +view --id <pr_id> --format json
   ```

2. **获取代码变更**
   ```bash
   gitlink-cli pr +files --id <pr_id> --format json
   gitlink-cli pr +diff --id <pr_id> --format json
   ```

3. **AI 分析代码**（Claude 分析 diff 内容）

4. **生成审查报告**（结构化 JSON/Markdown）

5. **（可选）添加评论**
   ```bash
   gitlink-cli api POST /:owner/:repo/pulls/:id/reviews --body '{
     "body": "<审查报告内容>",
     "event": "COMMENT"
   }'
   ```

## 🎯 最佳实践

### 审查时机

- **PR 创建后**：立即进行初步审查，快速发现问题
- **PR 更新后**：审查新增的代码变更
- **合并前**：最终审查确认代码质量

### 审查重点

根据 PR 类型调整审查重点：
- **功能 PR**：关注代码质量和可维护性
- **Bug 修复 PR**：关注修复是否完整、测试是否充分
- **重构 PR**：关注性能改进和代码简化
- **文档 PR**：关注文档完整性和准确性

### 评论规范

- **建设性**：提供具体的修改建议，而非仅指出问题
- **礼貌友好**：使用积极的语言，避免负面批评
- **解释原因**：说明为什么需要修改，帮助开发者理解
- **认可优点**：及时指出代码中的优秀实践

### 自动化审查

可以配置 CI/CD 流程自动触发代码审查：
- PR 创建时自动审查
- 审查失败时阻止合并
- 审查通过后允许人工审查

## 📚 相关文档

- [PR 基础操作](../gitlink-pr/SKILL.md)
- [详细操作参考](references/)
- [工作流示例](examples/)

## ❓ 常见问题

### Q: 如何提高审查的准确性？

A: 
1. 提供完整的 diff 内容，而非仅文件列表
2. 根据项目类型调整审查规则（如前端/后端/移动端）
3. 结合项目上下文进行分析（如代码规范文档）

### Q: 如何处理误报？

A:
1. AI 审查可能产生误报，需要人工验证
2. 可以配置白名单忽略特定规则
3. 提供反馈改进审查规则

### Q: 审查报告是否可以作为合并条件？

A:
1. 可以将审查评分设置为合并门禁
2. 建议设置最低评分要求（如 70 分以上）
3. 高优先级问题必须修复后才能合并

## 🔗 参考资源

- [gitlink-pr/SKILL.md](../gitlink-pr/SKILL.md) - PR 操作指南
- [gitlink-workflow/SKILL.md](../gitlink-workflow/SKILL.md) - AI 工作流
- [代码审查最佳实践](https://google.github.io/eng-practices/review/) - Google 代码审查指南
