---
name: code-review
description: Code Review Skill
---

# Code Review Skill

代码审查清单和 PR 规范。

## PR 提交规范

### PR 标题格式
```
<type>(<scope>): <description>

示例:
feat(auth): 添加 OAuth2.0 登录功能
fix(api): 修复用户列表分页问题
refactor(db): 优化查询性能
```

### PR 描述模板
```markdown
## 变更说明
简要描述本次变更的内容和目的

## 变更类型
- [ ] 新功能
- [ ] Bug 修复
- [ ] 重构
- [ ] 性能优化
- [ ] 文档更新

## 关联 Issue
Closes #123

## 测试说明
- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] 手动测试通过

## 截图（如适用）
UI 变更请附截图

## 检查清单
- [ ] 代码符合项目规范
- [ ] 已添加必要的测试
- [ ] 已更新相关文档
- [ ] 无敏感信息泄露
```

## 代码审查清单

### 功能正确性
- [ ] 代码实现了预期功能
- [ ] 边界条件处理正确
- [ ] 错误处理完善
- [ ] 无明显的逻辑漏洞

### 代码质量
- [ ] 命名清晰有意义
- [ ] 函数职责单一
- [ ] 无重复代码
- [ ] 复杂逻辑有注释
- [ ] 无硬编码的魔法数字

### 安全性
- [ ] 输入验证完整
- [ ] 无 SQL 注入风险
- [ ] 无 XSS 风险
- [ ] 敏感信息已脱敏
- [ ] 权限检查到位

### 性能
- [ ] 无 N+1 查询
- [ ] 无不必要的循环
- [ ] 大数据量有分页
- [ ] 耗时操作有缓存或异步

### 可维护性
- [ ] 代码结构清晰
- [ ] 依赖关系合理
- [ ] 易于测试
- [ ] 易于扩展

## 审查反馈规范

### 评论分类
```
[必须] 必须修改才能合并
[建议] 建议修改，可讨论
[疑问] 需要解释或讨论
[赞] 写得好的地方
```

### 反馈示例
```
[必须] 这里存在 SQL 注入风险，请使用参数化查询

[建议] 这个函数超过 50 行，建议拆分为更小的函数

[疑问] 为什么这里用 setTimeout 而不是 debounce？

[赞] 这个抽象设计得很好，复用性强
```

## 审查流程

```
┌─────────────┐
│  提交 PR    │
└──────┬──────┘
       ▼
┌─────────────┐
│  CI 检查    │ ← 自动化测试、lint、构建
└──────┬──────┘
       ▼
┌─────────────┐
│  代码审查   │ ← 至少 1 人 approve
└──────┬──────┘
       ▼
┌─────────────┐
│  修改反馈   │ ← 根据评论修改
└──────┬──────┘
       ▼
┌─────────────┐
│  合并代码   │ ← Squash merge
└─────────────┘
```

## 审查原则

### 审查者
- 及时响应（24小时内）
- 提供建设性反馈
- 尊重作者的设计决策
- 区分必须修改和建议修改

### 作者
- PR 尽量小（<400行）
- 提供充分的上下文
- 积极回应反馈
- 不要 defensive

## 自动化检查

```yaml
# GitHub Actions 示例
name: PR Check

on: [pull_request]

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Lint
        run: npm run lint
        
      - name: Type Check
        run: npm run type-check
        
      - name: Test
        run: npm run test
        
      - name: Build
        run: npm run build
```

