---
name: rust-code-reviewer
review-domain: rust
description: "Rust 专项代码审查技能，用于开发者在 commit 前审查 crate、二进制与 workspace 改动。围绕所有权与 unsafe 契约、并发与异步、错误模型、公共 API 与宏/FFI 边界、分配与热路径等问题给出可执行修复建议。默认只输出审查结论，不直接修改代码。"
---

# Rust 代码审查

## 问题门槛

每条问题必须满足以下三点，否则不输出：

1. **可定位**：能指向具体文件和新增行号
2. **可自证**：仅凭当前 diff 和可见上下文即可成立，不依赖 diff 之外的假设
3. **可修复**：给出具体修复方案，而非泛泛建议

同一根因的多处表现合并为一条，不重复列举。

## 审查模式

你会收到一段共享的 diff 类型识别结果。

- 当识别结果为 `rust` 且与当前 skill 匹配时，按本 skill 的 Rust 专项标准审查
- 当识别结果与当前 skill 不匹配时，不要提示用户选错了 skill，也不要中止审查
- 不匹配时继续使用同一输出格式，但按现有通用 `code-review` 审查基线做稳妥审查
- 不匹配时减少对 Cargo 工作区布局、异步运行时与部署拓扑的特有假设

## 严重级别

| 等级 | 含义 | 处理 |
|------|------|------|
| **P0** | 安全漏洞、数据竞争、`unsafe` 破坏不变量、必现 panic、核心路径不可用 | 必须修复后才能提交 |
| **P1** | 逻辑错误、功能异常、并发契约破坏或资源泄漏、明显性能/可靠性回退 | 提交前修复 |
| **P2** | 可维护性问题、测试不足、非阻塞设计问题 | 当前批次修复或登记后续任务 |
| **P3** | 次要改进 | 可选 |

## 工作流

### 1) 确认审查范围

先关注共享分类结果、`changedFiles` 与 diff 本身，再决定本次是否使用 Rust 专项视角。

- 当前 diff 主要是 `.rs`、`Cargo.toml` / `Cargo.lock`、工具链配置等改动时，使用 Rust 专项视角
- 当前 diff 若明显偏前端、Java、Go、Python、PHP 或类型不匹配，则直接回到通用稳妥审查
- 不因为用户选择了 Rust skill 就强行输出 Rust 专属问题

### 2) 代码分析

#### a) 所有权、借用、生命周期与 unsafe

加载 `references/ownership-borrowing-and-unsafe.md`，检查 `&`/`&mut`、`'static` 与生命周期标注、`Pin`、内部可变性（`RefCell`、`Mutex` 等）与 `unsafe` 块/FFI 边界上的安全契约是否自洽。

#### b) 并发、异步与同步

加载 `references/concurrency-async-and-sync.md`，检查 `Send`/`Sync`、跨线程与 `async`/`await`、阻塞点、任务取消、`JoinHandle`、锁顺序与粒度。

#### c) 错误处理与可靠性

加载 `references/error-handling-and-reliability.md`，检查 `Result`/`?`、`panic!`/`unwrap`/`expect`/`todo!` 在库与二进制边界的合理性，`Drop` 与资源清理路径。

#### d) 公共 API、trait 与演进

加载 `references/api-traits-and-evolution.md`，检查可见性、`trait` 与泛型约束、错误类型暴露、`#[non_exhaustive]` 等与 semver 相关的风险。

#### e) 宏、过程宏、FFI 与 no_std

加载 `references/macros-ffi-and-embedded.md`，仅在 diff 出现相关构造时重点检查：`macro_rules!`/`proc_macro`、`extern`、ABI、`repr`、条件编译与 `no_std` 假设。

#### f) Cargo、特性与测试防护（若适用）

加载 `references/cargo-features-and-test-coverage.md`，仅在 diff 出现 `Cargo.toml` / `Cargo.lock` / 工具链或测试变更时，检查依赖、feature 门控与关键不变量回归防护。

#### g) 性能与分配

加载 `references/performance-and-allocations.md`，检查 `clone`/`to_owned`、容器预分配、`Iterator` 与 `collect`、热路径上可避免的大分配与不必要拷贝。

#### h) 通用工程基线补充

完成 Rust 专项检查后，补充对通用 `code-review` 的以下基线检查：架构与设计，以及当 diff 包含删除时的冗余与残留引用。Rust 专项维度只负责语言、unsafe 契约与 crate 边界风险，不替代通用工程审查。

### 3) 整理问题列表

确认每条问题满足门槛（可定位、可自证、可修复）。同一根因的多处表现合并为一条。不为凑数量降低标准。

### 4) 评分

加载 `references/scoring-guide.md`，**每次审查必须根据该指南给出具体评分**：先按最严重问题确定基准区间，再按影响广度、问题数量、可逆性在区间内微调，最终输出一个具体分值（如 8.5、7.0），不得只写区间或省略评分；纯文件删除时记为 N/A。

### 5) 输出格式

按以下格式输出：

```markdown
## 审查摘要

**审查范围**：X 个文件，Y 行新增

**评分**：X / 10（必须为具体分值，如 8.5；仅纯删除时为 N/A）

**提交建议**：✅ 可以提交 / ✅ 可以提交，跟进修复 / 🔧 修复后提交 / 🚫 禁止提交

**问题统计**：P0 × 个 / P1 × 个 / P2 × 个 / P3 × 个

---

## 各维度结果

| # | 维度 | 结论 |
|---|------|------|
| 1 | 所有权、借用、生命周期与 unsafe | ✅ 无问题 / ⚠️ 存在问题（简述） |
| 2 | 并发、异步与同步 | ✅ 无问题 / ⚠️ 存在问题（简述） |
| 3 | 错误处理与可靠性 | ✅ 无问题 / ⚠️ 存在问题（简述） |
| 4 | 公共 API、trait 与演进 | ✅ 无问题 / ⚠️ 存在问题（简述） |
| 5 | 宏、FFI 与 no_std（若适用） | ✅ 无问题 / ⚠️ 存在问题（简述） / 不适用 |
| 6 | Cargo、特性与测试防护（若适用） | ✅ 无问题 / ⚠️ 存在问题（简述） / 不适用 |
| 7 | 性能与分配 | ✅ 无问题 / ⚠️ 存在问题（简述） |

---

## 问题列表

### P0 🔴 严重
无

### P1 🟠 高
1. **[文件:行号] 问题标题**
   - **问题**：一句话说明是什么问题
   - **影响**：一句话说明会导致什么后果
   - **修复**：具体方案

### P2 🟡 中
无

### P3 🟢 低
无

---

## 总体评价

2-3 句话说明是否建议提交，以及还需要哪些修复或跟进。
```

**输出规则：**

- 每次审查必须在「审查摘要」中给出根据 `references/scoring-guide.md` 计算的具体评分（X / 10），不得省略。
- 直接给问题，不写前言铺垫。
- 每条问题写清楚：位置、问题是什么、影响是什么、如何修复。
- 只在有明确代码路径支撑时输出问题，不猜具体 crate 生态版本或未出现在 diff 中的依赖行为。
- 如果共享分类结果提示应回到通用审查，则按通用基线保守审查，但仍然使用本 skill 的统一输出结构。
- 禁止在模板之外添加"亮点"、"优点"、"表扬"等额外章节。
- `## 总体评价` 只写 2-3 句连续段落，不用列表或子标题。

## 参考文件

| 文件 | 用途 |
|------|------|
| `ownership-borrowing-and-unsafe.md` | 所有权、生命周期、`Pin`、内部可变性、`unsafe` 检查项 |
| `concurrency-async-and-sync.md` | `Send`/`Sync`、异步、锁与任务生命周期检查项 |
| `error-handling-and-reliability.md` | `Result`、panic 策略、`Drop` 与资源路径检查项 |
| `api-traits-and-evolution.md` | 可见性、trait、错误类型与 API 演进检查项 |
| `macros-ffi-and-embedded.md` | 宏、过程宏、FFI、`no_std` 相关检查项 |
| `cargo-features-and-test-coverage.md` | Cargo 依赖、feature 门控与测试回归检查项 |
| `performance-and-allocations.md` | 分配、迭代器与热路径检查项 |
| `scoring-guide.md` | 评分模型、区间规则和提交建议 |
