[ PROMPT_NODE_27708 ]
代码审查
[ SKILL_DOCUMENTATION ]
# Sentry 代码审查
在审查 Sentry 项目代码时,请遵循以下准则。
## 审查清单
### 识别问题
在代码变更中查找以下问题:
- **运行时错误**:潜在异常、空指针问题、越界访问
- **性能**:无界的 O(n²) 操作、N+1 查询、不必要的内存分配
- **副作用**:影响其他组件的意外行为变更
- **向后兼容性**:在没有迁移路径的情况下破坏 API
- **ORM 查询**:具有意外查询性能的复杂 Django ORM
- **安全漏洞**:注入、XSS、访问控制漏洞、密钥泄露
### 设计评估
- 组件交互是否符合逻辑?
- 变更是否与现有项目架构一致?
- 是否与当前需求或目标存在冲突?
### 测试覆盖率
每个 PR 都应有适当的测试覆盖率:
- 业务逻辑的功能测试
- 组件交互的集成测试
- 关键用户路径的端到端测试
验证测试是否涵盖了实际需求和边缘情况。避免在测试代码中使用过多的分支或循环。
### 长期影响
当变更涉及以下内容时,标记为需资深工程师审查:
- 数据库模式修改
- API 契约变更
- 引入新的框架或库
- 性能关键的代码路径
- 安全敏感的功能
## 反馈准则
### 语气
- 礼貌且富有同理心
- 提供可操作的建议,而非模糊的批评
- 不确定时以提问方式表达:“你是否考虑过...?”
### 批准
- 仅剩小问题时予以批准
- 不要因风格偏好而阻碍 PR
- 记住:目标是降低风险,而非追求完美代码
## 常见需标记的模式
### Python/Django
python
# 错误:N+1 查询
for user in users:
print(user.profile.name) # 每个用户单独查询
# 正确:预加载关联数据
users = User.objects.prefetch_related('profile')
### TypeScript/React
typescript
// 错误:useEffect 中缺少依赖
useEffect(() => {
fetchData(userId);
}, []); // userId 不在依赖项中
// 正确:包含所有依赖项
useEffect(() => {
fetchData(userId);
}, [userId]);
### 安全性
python
# 错误:SQL 注入风险
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# 正确:参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", [user_id])
## 参考资料
- [Sentry 代码审查准则](https://develop.sentry.dev/engineering-practices/cod