mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
3.9 KiB
3.9 KiB
description
| description |
|---|
| 全面的Rust代码审查,涵盖所有权、生命周期、错误处理、不安全代码使用以及惯用模式。调用rust-reviewer代理。 |
Rust 代码审查
此命令调用 rust-reviewer 代理进行全面的 Rust 专项代码审查。
此命令的作用
- 验证自动化检查:运行
cargo check、cargo clippy -- -D warnings、cargo fmt --check和cargo test—— 任何一项失败则停止 - 识别 Rust 变更:通过
git diff HEAD~1(或针对 PR 使用git diff main...HEAD)查找修改过的.rs文件 - 运行安全审计:如果可用,则执行
cargo audit - 安全扫描:检查不安全使用、命令注入、硬编码密钥
- 所有权审查:分析不必要的克隆、生命周期问题、借用模式
- 生成报告:按严重性对问题进行分类
何时使用
在以下情况下使用 /rust-review:
- 编写或修改 Rust 代码之后
- 提交 Rust 变更之前
- 审查包含 Rust 代码的拉取请求时
- 接手新的 Rust 代码库时
- 学习惯用的 Rust 模式时
审查类别
关键(必须修复)
- 生产代码路径中未经检查的
unwrap()/expect() - 没有
// SAFETY:注释记录不变量的unsafe - 查询中通过字符串插值导致的 SQL 注入
- 在
std::process::Command中通过未经验证的输入导致的命令注入 - 硬编码凭据
- 通过原始指针导致的释放后使用
高(应该修复)
- 为满足借用检查器而进行的不必要的
.clone() - 参数为
String,而&str或impl AsRef<str>即可满足 - 在异步上下文中的阻塞操作(
std::thread::sleep、std::fs) - 共享类型上缺少
Send/Sync约束 - 对业务关键枚举使用通配符
_ =>匹配 - 大型函数(>50 行)
中(考虑)
- 在热点路径中不必要的分配
- 已知大小时缺少
with_capacity - 未说明理由就抑制 clippy 警告
- 公共 API 缺少
///文档 - 对于忽略返回值很可能是错误的非
must_use返回类型,考虑使用#[must_use]
运行的自动化检查
# Build gate (must pass before review)
cargo check
# Lints and suggestions
cargo clippy -- -D warnings
# Formatting
cargo fmt --check
# Tests
cargo test
# Security audit (if available)
if command -v cargo-audit >/dev/null; then cargo audit; else echo "cargo-audit not installed"; fi
使用示例
User: /rust-review
Agent:
# Rust Code Review Report
## Files Reviewed
- src/service/user.rs (modified)
- src/handler/api.rs (modified)
## Static Analysis Results
- Build: Successful
- Clippy: No warnings
- Formatting: Passed
- Tests: All passing
## Issues Found
[CRITICAL] Unchecked unwrap in Production Path
File: src/service/user.rs:28
Issue: Using `.unwrap()` on database query result
```rust
let user = db.find_by_id(id).unwrap(); // Panics on missing user
```
Fix: Propagate error with context
```rust
let user = db.find_by_id(id)
.context("failed to fetch user")?;
```
[HIGH] Unnecessary Clone
File: src/handler/api.rs:45
Issue: Cloning String to satisfy borrow checker
```rust
let name = user.name.clone();
process(&user, &name);
```
Fix: Restructure to avoid clone
```rust
let result = process_name(&user.name);
use_user(&user, result);
```
## Summary
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
Recommendation: Block merge until CRITICAL issue is fixed
批准标准
| 状态 | 条件 |
|---|---|
| 批准 | 无关键或高优先级问题 |
| 警告 | 仅存在中优先级问题(谨慎合并) |
| 阻止 | 发现关键或高优先级问题 |
与其他命令的集成
- 首先使用
/rust-test确保测试通过 - 如果出现构建错误,使用
/rust-build - 提交前使用
/rust-review - 对于非 Rust 专项问题,使用
/code-review
相关
- 代理:
agents/rust-reviewer.md - 技能:
skills/rust-patterns/、skills/rust-testing/