返回顶部
r

review-verification-protocol审查验证协议

Mandatory verification steps for all code reviews to reduce false positives. Load this skill before reporting ANY code review findings.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.7
安全检测
已通过
218
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

review-verification-protocol

审查验证协议

在报告任何代码审查发现之前,必须遵循本协议。跳过这些步骤会导致误报,浪费开发人员时间并削弱对审查的信任。

报告前验证清单

在标记任何问题之前,请验证:

  • - [ ] 我阅读了实际代码 - 不仅仅是差异上下文,而是完整的函数/实现块
  • [ ] 我搜索了使用情况 - 在声称未使用之前,搜索了所有引用
  • [ ] 我检查了周围代码 - 问题可能在其他地方处理(trait实现、错误传播)
  • [ ] 我对照当前文档验证了语法 - Rust版本、crate版本和API变更
  • [ ] 我检查了项目的Rust版本 - 2021版与2024版在必需与可选方面的变化(参见版本感知审查
  • [ ] 我区分了错误与不同风格 - 两种方法可能都有效
  • [ ] 我考虑了有意设计 - 检查了注释、CLAUDE.md、架构上下文

按问题类型验证

未使用的变量/函数

在标记之前,你必须:

  1. 1. 在代码库中搜索所有引用(grep/find)
  2. 检查是否为pub并被工作区中其他crate使用
  3. 检查是否通过派生宏、trait实现或条件编译(#[cfg])使用
  4. 验证它不是trait定义所需的trait方法

常见误报:

  • - 方法由trait定义的trait实现
  • 仅在测试构建中使用的#[cfg(test)]项
  • 使用结构体字段的派生生成代码
  • 通过From/Into转换使用的类型

缺少错误处理

在标记之前,你必须:

  1. 1. 检查错误是否在更高级别处理(调用者使用?传播)
  2. 检查crate是否有包装此错误的顶级错误类型
  3. 验证unwrap()不在测试代码中或不在安全性确保检查之后

常见误报:

  • - 测试和示例中的unwrap()(预期模式)
  • 验证后的expect(reason)(例如,对字面量的regex::Regex::new)
  • 通过?的错误传播(由调用者处理)
  • let _ = tx.send(...) — 当接收者可能已丢弃时有意为之

不必要的生命周期 / RPIT捕获(2024版)

在标记之前,你必须:

  1. 1. 在Cargo.toml中检查项目的Rust版本
  2. 在2024版中,-> impl Trait默认捕获所有作用域内的生命周期
  3. 看似不必要的生命周期可能被隐式捕获 — 代码是正确的
  4. 如果作者使用+ use语法,这是精确捕获控制,而非错误

常见误报:

  • - 返回impl Trait的函数上的生命周期参数 — 2024版隐式捕获它们
  • + use语法 — 这是新的精确捕获语法,不是错误
  • 移除2024版现在自动提供的显式生命周期约束

缺少不安全块(2024版)

在标记之前,你必须:

  1. 1. 检查代码是否在unsafe fn内部
  2. 在2024版中,unsafeopinunsafefn默认拒绝 — unsafe fn内部的不安全操作需要显式的unsafe {}块
  3. 这是版本要求的行为,不是不必要的冗长

常见误报:

  • - unsafe fn内部的unsafe {}块 — 2024版中必需,不是冗余
  • unsafe extern C {} — 2024版中必需,不是可选的
  • #[unsafe(nomangle)] / #[unsafe(exportname)] — 2024版中必需

不必要的克隆

在标记之前,你必须:

  1. 1. 确认克隆实际上是可以避免的(借用检查器可能要求它)
  2. 检查值是否需要移入闭包/线程/任务
  3. 验证类型不是Copy(对Copy类型克隆是无操作)
  4. 检查克隆是否在热路径中(测试/设置代码中的克隆没问题)

常见误报:

  • - Arc::clone(&arc) — 这是推荐的Arc显式克隆方式
  • tokio::spawn之前的克隆 — 需要满足static约束
  • 测试设置中的克隆 — 清晰性优先于性能

潜在竞态条件

在标记之前,你必须:

  1. 1. 验证数据是否实际在线程/任务间共享
  2. 检查Mutex、RwLock或原子操作是否保护访问
  3. 确认类型是否尚未保证线程安全(例如,Arc>)
  4. 检查竞态是否实际上是良性的(例如,日志记录、指标)

常见误报:

  • - Arc> — 已经线程安全
  • Tokio通道操作 — 固有同步
  • std::sync::atomic操作 — 为并发访问设计

性能问题

在标记之前,你必须:

  1. 1. 确认代码运行频率足够高以至于重要
  2. 验证优化会产生可衡量的影响
  3. 检查编译器是否已经优化了这一点(迭代器融合、内联)

不要标记:

  • - 启动/初始化代码中的分配
  • 错误路径中的字符串格式化
  • 测试代码中的克隆
  • 小迭代器上的.collect()

严重程度校准

严重(阻止合并)

仅用于:

  • - 具有不安全不变量的unsafe代码
  • 通过字符串插值的SQL注入
  • 释放后使用或内存安全违规
  • 数据竞争(无同步的并发修改)
  • 用户输入的生产代码路径中的恐慌

主要(应修复)

用于:

  • - 跨模块边界缺少错误上下文
  • 异步运行时中的阻塞操作
  • 跨等待点持有的互斥锁守卫
  • 多语句数据库写入缺少事务

次要(考虑修复)

用于:

  • - 公共项缺少文档注释
  • 可以使用&str却使用String参数
  • 次优的迭代器模式
  • 具有重要返回值的函数缺少#[must_use]

信息性(无需操作)

用于:

  • - 关于newtype、构建器模式或类型状态的建议
  • 没有可衡量影响的性能优化
  • 添加#[non_exhaustive]的建议
  • trait设计的重构想法

这些不是审查阻塞项。

完全不要标记

  • - 两种方法都有效的风格偏好(例如,单变体的if let vs match)
  • 没有可衡量收益的优化
  • 不符合生产标准的测试代码
  • 生成代码或宏输出
  • 项目有意抑制的Clippy lint

有效模式(不要标记)

Rust

模式为什么有效
测试中的unwrap()标准测试行为 — 在意外错误时恐慌
测试设置中的.clone()
清晰性优先于性能 | | 测试模块中的use super::* | 访问父项的标准模式 | | 二进制文件中的Box | 并非每个应用都需要自定义错误类型 | | 结构体中的String字段 | 拥有数据对于结构体字段是正确的 | | Arc::clone(&x) | 显式Arc克隆是惯用的且推荐的 | | 带理由的#[allow(clippy::...)] | 有意抑制是有效的 | | #[expect(lint)]替代#[allow] | 自清理抑制(自1.81稳定)— 当lint不再触发时发出警告 | | unsafe fn内部的unsafe {} | 2024版必需(unsafeopinunsafefn = 拒绝) | | unsafe extern C {} | 2024版对外部块必需 | | #[unsafe(no_mangle)] | 2024版对安全相关属性必需 | | #[unsafe(export_name = ...)] | 2024版对安全相关属性必需 | | impl Trait返回上的+ use | 2024版RPIT的精确捕获语法 | | 作为标识符的r#gen | gen在2024版中保留 | | LazyLock / LazyCell | oncecell/lazystatic的标准库替代(自1.80稳定) | | trait定义中的async fn | 不再需要async-trait crate(自1.75稳定) | | #[diagnostic::on_unimplemented] | 自定义trait错误消息(自1.78稳定) |

异步/Tokio

| 模式 | 为什么有效 |
|---------|----------------|
| 短临界区的

标签

skill ai
v1.0.7 最新 2026-4-14 09:47
Edition 2024 review checks added for Rust code

- Expanded checklist to require checking and applying rules per the project's Rust edition (2021 vs 2024).
- New sections detailing false positives and correct flagging procedures for:
- "Unnecessary Lifetime"/RPIT capture (Edition 2024)
- "Missing Unsafe Block" (Edition 2024, including `unsafe_op_in_unsafe_fn`)
- Updated "Valid Patterns" with edition 2024 idioms (e.g., explicit unsafe blocks, precise lifetime capture, reserved identifier usage, new standard library constructs).
- Added reminders and examples for changes in Rust lint suppressions (e.g., `#[expect(lint)]`), async trait methods, and other Rust 1.80+ features.
- Retains all previous review guidance; additions focus on reducing review mistakes in codebases adopting Rust 2024 edition.

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部