SuperAPI AI 工具集

rust-coding-style

编程与开发

查看项目

更新于 10-16 05:50

技能介绍

用途:这是一份 HASH 项目专用的 Rust 编码风格规范,适用于编写或评审 Rust 代码、选择类型与导入、设计函数参数和命名时参考。

主要约定:使用 Rust 2024 edition;优先用 derive_more 而非手写 trait 实现;特性开关用 #[cfg(feature = "...")],并在根目录执行 cargo clippy --all-features --all-targets --no-deps,用 cargo doc --no-deps --all-features 检查文档,用 rustfmt 格式化;用 #[expect(lint, reason = "...")] 代替 #[allow(lint)]。

类型与函数:用 newtype 表达领域实体语义,谨慎控制可见性。函数参数不超过 7 个,超出则封装为结构体;只读用引用、修改用可变引用,除非明确消费否则不取得所有权;尽量声明为 const。适当时优先 impl AsRef<str>/Path、impl IntoIterator、&[T]、&mut [T]、impl Into<Cow/Arc/Rc/Box<T>>,但不得降低性能,且不用 impl Into<Option<_>>。优先实现 From 而非 Into,转换时用 from 更清晰;智能指针克隆用 Arc::clone(&p)、Rc::clone(&p)。

异步与日志:trait 中返回 impl Future<Output = T> + Send;重要函数加 #[tracing::instrument],日志用 tracing 宏而非 println!/eprintln! 或 log 宏。

分配与命名:尽量减少分配,适当复用 Vec、优先借用;命名避免 test_ 前缀、避免类型后缀(usersList)与重复类型名,缩写仅限公认(如 Http、Json);测试断言用 similar_asserts、快照用 insta、测试输出用 test_log。

导入:禁止函数内局部导入与通配导入(含 prelude::*),优先显式导入;按 core > alloc > std 取舍;频繁使用的类型用限定导入,仅在需要 trait 方法时用 use ... as _。第三方集成抽象为 trait,注释独立成行,断言带描述信息,expect() 消息以 “should ...” 开头。缺失信息:具体项目结构与完整代码示例暂未提供。