mcpField
R
rust-skills

rust-skills

github.com/leonardomso开发6526.5k 次安装19 周前更新
代码仓库

关于 rust-skills

面向编写、审查和重构 Rust 代码的实践指南,按影响优先级整理规则,涵盖所有权、错误处理、异步、并发和性能等主题。

主要功能

  1. 01按优先级组织 Rust 规则
  2. 02涵盖所有权与借用
  3. 03指导错误处理和异步代码
  4. 04涵盖并发与 unsafe 代码
  5. 05提供 API 设计和性能建议
  6. 06涉及测试、文档与项目结构

适用场景

  1. 01编写新的 Rust 函数或模块
  2. 02审查所有权和借用问题
  3. 03改进异步、并发或 unsafe 实现
  4. 04重构并优化 Rust 项目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/leonardomso/rust-skills --skill rust-skills

安装后在 Claude Code 中输入/rust-skills确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

AGENTS.md
CLAUDE.md
CHANGELOG.md
LICENSE
CONTRIBUTING.md
README.md
.github/workflows/
ci.yml
checks/
.gitignore
Cargo.lock
Cargo.toml
README.md
check.sh
baseline.txt
gen.py
analyze.py
rust-toolchain.toml
gen_index.py
validate.py
checks/src/
lib.rs
rules/
anti-collect-intermediate.md
anti-clone-excessive.md
anti-index-over-iter.md
anti-expect-lazy.md
anti-format-hot-path.md
anti-empty-catch.md
anti-lock-across-await.md
anti-panic-expected.md
anti-over-abstraction.md
anti-premature-optimize.md
anti-stringly-typed.md

详细介绍

Rust 最佳实践

编写高质量、符合 Rust 惯例且高度优化的 Rust 代码的综合指南。包含 26 个类别中的 265 条规则,按影响程度排序,用于指导大模型进行代码生成和重构。适用于 Rust 1.96(2024 edition)。

适用场景

在以下场景中参考这些指南:

  • 编写新的 Rust 函数、结构体或模块
  • 实现错误处理或异步代码
  • 编写并发、并行或 unsafe 代码
  • 为库设计公共 API
  • 检查代码中的所有权/借用问题
  • 优化内存使用或减少分配
  • 调优热点路径的性能
  • 重构现有 Rust 代码

按优先级划分的规则类别

优先级类别影响前缀规则数
1所有权与借用CRITICALown-12
2错误处理CRITICALerr-12
3内存优化CRITICALmem-17
4不安全代码CRITICALunsafe-7
5API 设计HIGHapi-17
6Async/AwaitHIGHasync-18
7并发HIGHconc-4
8编译器优化HIGHopt-12
9数值与算术安全HIGHnum-5
10类型安全MEDIUMtype-13
11Trait 与泛型设计MEDIUMtrait-6
12转换MEDIUMconv-3
13Const 与编译期处理MEDIUMconst-4
14SerdeMEDIUMserde-8
15模式匹配MEDIUMpat-5
16宏MEDIUMmacro-8
17闭包MEDIUMclosure-5
18集合MEDIUMcoll-4
19命名约定MEDIUMname-16
20测试MEDIUMtest-15
21文档MEDIUMdoc-12
22可观测性MEDIUMobs-7
23性能模式MEDIUMperf-13
24项目结构LOWproj-14
25Clippy 与 LintLOWlint-13
26反模式REFERENCEanti-15

快速参考

1. 所有权与借用(CRITICAL)
2. 错误处理(关键)
3. 内存优化(关键)
4. 不安全代码(严重)
  • unsafe-safety-comment - 在每个 unsafe 代码块上方编写 // SAFETY: 注释,并在每个 unsafe fn 中添加 # Safety 章节。
  • unsafe-minimize-scope - 尽可能缩小 unsafe 代码块的范围——只标记需要不安全操作的部分,不要包含周围的安全代码。
  • unsafe-miri-ci - 对每个包含 unsafe 代码的 crate,在 CI 中运行 cargo miri test。
  • unsafe-maybeuninit - 使用 MaybeUninit<T> 处理未初始化内存;对于具有有效性约束的类型,绝不要使用 mem::uninitialized() 或 mem::zeroed()。
  • unsafe-extern-block - 在 Rust 2024 中,将 extern 代码块写为 unsafe extern { },并将每个条目标注为 safe 或 unsafe。
  • unsafe-send-sync-manual - 手动实现 Send 或 Sync 时,记录相关不变式;优先让编译器自动推导。
  • unsafe-no-mangle-unsafe - 在 Rust 2024 中,使用 #[unsafe(no_mangle)]、#[unsafe(export_name = "...")] 和 #[unsafe(link_section = "...")],而非不带包装的属性形式。
5. API 设计(高)
6. 异步/等待(HIGH)
7. 并发(HIGH)
8. 编译器优化(高)
  • opt-inline-small - 对小型热点函数使用 #[inline]
  • opt-inline-always-rare - 谨慎使用 #[inline(always)]——仅用于经性能分析证实的关键热点路径
  • opt-inline-never-cold - 对错误路径和极少执行的代码使用 #[inline(never)] 和 #[cold]
  • opt-cold-unlikely - 使用 #[cold] 标记不太可能执行的代码路径,以帮助编译器优化
  • opt-likely-hint - 使用代码结构提示可能执行的分支;在 nightly 上使用内建函数
  • opt-lto-release - 在发布构建中启用 LTO
  • opt-codegen-units - 将 codegen-units = 1 设置为在发布构建中实现最大优化
  • opt-pgo-profile - 使用基于性能分析的优化(PGO)来实现最高性能
  • opt-target-cpu - 在已知的部署目标上使用 target-cpu=native 以实现最高性能
  • opt-bounds-check - 在热点路径中使用可消除边界检查的迭代器和模式
  • opt-simd-portable - 使用可移植 SIMD 在不同架构上执行向量化操作
  • opt-cache-friendly - 组织数据,以实现缓存友好的访问模式
9. 数值与算术安全性(高)
  • num-overflow-explicit - 显式处理整数溢出:checked_/saturating_/wrapping_/overflowing_
  • num-cast-try-from - 避免在窄化转换中使用 as;扩大转换使用 From,窄化转换使用 TryFrom
  • num-float-compare - 不要使用 == 比较浮点数;使用容差,并在排序时使用 total_cmp
  • num-saturating-clamp - 使用 clamp 和饱和算术限制数值范围
  • num-nonzero - 使用 NonZero* 类型禁止零值,并启用利基优化
10. 类型安全(中)
11. Trait 与泛型设计(中等)
  • trait-associated-type-vs-generic - 当每个实现恰好有一个输出类型时,使用关联类型;当某个类型可以针对多种输入类型实现该 trait 时,使用泛型参数
  • trait-blanket-impl - 使用 blanket impl impl<T: Bound> Trait for T,为所有满足约束的类型提供行为
  • trait-coherence-newtype - 遵守孤儿规则;将外部类型包装为 newtype,以便为其实现外部 trait
  • trait-default-methods - 通过少数必需方法及基于这些方法的默认方法来定义 trait
  • trait-dyn-vs-generic - 有意识地选择静态分发(泛型 / impl Trait)还是动态分发(dyn Trait)
  • trait-object-safety - 需要使用 dyn Trait 时,确保 trait 与 dyn 兼容(对象安全)
12. 类型转换(中等)
  • conv-tryfrom-fallible - 对可能失败的类型转换实现 TryFrom,而不是使用临时的转换函数
  • conv-fromstr-parsing - 实现 FromStr,以便对字符串到类型的转换使用 str::parse
  • conv-asmut-mutable - 使用 impl AsMut<T> 接受灵活的可变借用输入,而不是具体的可变引用
13. 常量与编译时计算(中等)
  • const-block - 使用内联 const { } 块进行编译时求值和断言
  • const-fn - 函数可在编译时运行时,将其声明为 const fn
  • const-generics - 使用 const 泛型 <const N: usize>,按值进行参数化
  • const-vs-static - 内联值使用 const,单个具有固定地址的实例使用 static
14. Serde(中等)
15. 模式匹配(中等)
16. 宏(中)
17. 闭包(中)
  • closure-fn-trait-bounds - 回调只需满足其所需的最宽松 Fn trait(FnOnce ⊇ FnMut ⊇ Fn)
  • closure-impl-fn-return - 将闭包作为 impl Fn/FnMut/FnOnce 返回,而不是 Box<dyn Fn>
  • closure-move-capture - 对生命周期超出当前作用域的闭包使用 move;在 move 前克隆,以保留原值
  • closure-static-vs-dyn - 热路径回调接受泛型 impl Fn;若要减少代码体积或存储回调,则使用 &dyn Fn/Box<dyn Fn>
  • closure-disjoint-capture - 只捕获实际使用的内容;充分利用 edition-2021 的闭包不相交捕获
18. 集合(中)
  • coll-binaryheap - 对于优先队列或反复提取最大值,使用 BinaryHeap
  • coll-map-choice - 根据访问模式选择映射:HashMap(速度快、无序)、BTreeMap(有序/范围查询)、IndexMap(按插入顺序)
  • coll-seq-choice - 默认使用 Vec;队列/双端队列行为使用 VecDeque;避免使用 LinkedList
  • coll-set-membership - 使用 HashSet/BTreeSet 进行成员测试和去重,而不是线性遍历 Vec::contains
19. 命名约定(中)
20. 测试(中)
21. 文档(MEDIUM)
22. 可观测性(MEDIUM)
  • obs-tracing-over-log - 使用 tracing 进行结构化、带跨度上下文的诊断,而非 println! 或裸 log
  • obs-library-facade - 库通过 tracing/log 门面输出日志,绝不安装订阅器
  • obs-structured-fields - 记录结构化的键值字段,而非将值插入消息字符串
  • obs-instrument-spans - 使用 #[tracing::instrument] 和跨度为异步任务与请求附加上下文
  • obs-levels-filter - 合理使用日志级别,并通过 EnvFilter / RUST_LOG 进行过滤
  • obs-error-chain - 记录错误的完整来源链,并确保每个错误只记录一次
  • obs-no-sensitive-data - 绝不记录机密或个人身份信息(PII);对其进行脱敏或跳过
23. 性能模式(MEDIUM)
24. 项目结构(LOW)
25. Clippy 与 Lint(LOW)
26. 反模式(参考)

推荐的 Cargo.toml 设置

[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true

[profile.bench]
inherits = "release"
debug = true
strip = false

[profile.dev]
opt-level = 0
debug = true

[profile.dev.package."*"]
opt-level = 3  # Optimize dependencies in dev

使用方法

此技能提供规则标识符,便于快速参考。生成或审查 Rust 代码时:

  1. 检查相关类别,根据任务类型选择
  2. 应用规则,使用匹配的前缀
  3. 确定优先级:CRITICAL > HIGH > MEDIUM > LOW
  4. 阅读规则文件,在 rules/ 中查看详细示例
按任务应用规则
任务主要类别
新函数own-、err-、name-、pat-
新结构体/APIapi-、type-、conv-、doc-
异步代码async-、own-
并发/并行conc-、async-、own-
不安全代码unsafe-、type-、test-
错误处理err-、api-、pat-
类型转换conv-、api-
序列化(serde)serde-、type-、api-
数值/算术num-、type-
宏/代码生成macro-、anti-
闭包/回调closure-、type-
日志记录/可观测性obs-、err-
内存优化mem-、own-、perf-
性能调优opt-、mem-、perf-
代码审查anti-、lint-

来源与致谢

此技能综合了官方 Rust 指南、知名书籍和广泛使用的 crate 中的实践经验。它与 Rust 项目或任何 crate 作者均无关联,也未获其认可;文中内容和代码示例均为原创。

官方 Rust 文档

书籍与指南

工具

用于研究惯用写法的真实代码库

  • ripgrep、tokio、serde、clap、polars、axum、cargo、hyper、bevy、rayon,以及 dtolnay 的 crate(thiserror、anyhow、syn)

本项目采用 MIT 许可证。引用的上游材料仍受各自许可证约束(官方 Rust 文档和 API 指南采用 MIT / Apache-2.0 双重许可)。

评论

支持 Markdown