用途
该技能用于为开源 Rust/WebAssembly 项目实现达到生产就绪标准的代码。它以“高级软件工程师”的视角工作,要求实现严格遵循已批准的架构设计,并交付整洁、可维护且经过充分测试的代码。
主要能力
代码实现
- 编写地道的 Rust 代码,遵循项目编码规范。
- 使用合适的类型实现错误处理。
- 采用恰当的抽象,避免过度设计。
测试
- 为所有公共函数编写单元测试。
- 为模块间交互编写集成测试。
- 为复杂逻辑编写属性测试(property-based tests)。
- 为示例编写文档测试。
文档
- 为所有公共项编写 Rustdoc 注释。
- 在文档中提供示例。
- 编写模块级文档。
- 在需要时更新 README。
代码质量
- 通过 cargo clippy 且无警告。
- 通过 cargo fmt 检查。
- 显式处理所有错误情况。
- 生产代码中不使用 unwrap()(测试中除外)。
使用方式
该技能以一套明确的原则和检查清单驱动工作:
核心原则为:遵循设计、为一切编写测试、零警告、为公共 API 编写文档。
在标记代码完成之前,需逐项核对实现检查清单:代码编译无警告、所有 clippy lint 通过、使用 rustfmt 格式化、单元测试已编写并通过、适用时编写集成测试、为公共 API 提供文档、完成错误处理、不遗留未处理的 TODO 注释、必要时更新 CHANGELOG。
资料还提供了 Rust 常用模式作为实现参考:
使用 thiserror 定义库错误,使用 anyhow 处理应用层错误:
#[derive(Debug, thiserror::Error)]
pub enum MyError {
#[error("failed to process: {0}")]
Processing(String),
#[error(transparent)]
Io(#[from] std::io::Error),
}
fn main() -> anyhow::Result<()> {
// ...
}
构建器模式:
#[derive(Default)]
pub struct ConfigBuilder {
timeout: Option<Duration>,
retries: Option<u32>,
}
impl ConfigBuilder {
pub fn timeout(mut self, timeout: Duration) -> Self {
self.timeout = Some(timeout);
self
}
pub fn build(self) -> Config {
Config {
timeout: self.timeout.unwrap_or(Duration::from_secs(30)),
retries: self.retries.unwrap_or(3),
}
}
}
异步模式:优先使用 tokio 作为异步运行时,使用通道进行通信:
use tokio::sync::mpsc;
async fn worker(mut rx: mpsc::Receiver<Task>) {
while let Some(task) = rx.recv().await {
process(task).await;
}
}
适用场景
适用于开源 Rust/WebAssembly 项目中已获得架构设计批准后的代码实现阶段,包括编写功能代码、补齐测试、编写文档以及通过 lint/格式检查。
技术栈
- 异步运行时:tokio
- 序列化:serde 及合适格式(JSON、MessagePack 等)
- HTTP:客户端使用 reqwest,服务端使用 axum
- CLI:clap 配合 derive 宏
- 日志:tracing 生态
- 测试:内置测试框架加 proptest 用于属性测试
代码风格
- 行长限制:100 字符。
- 在 impl 块中使用 Self。
- 函数签名中优先使用显式类型。
- 使用 ? 运算符传播错误。
- 按组组织导入:std、外部 crate、内部模块。
- 为返回不应被忽略的值的函数添加 #[must_use]。
限制与约束
- 绝不跳过测试。
- 绝不在库代码中使用 unwrap() 或 expect()。
- 绝不静默忽略错误。
- 始终处理所有 match 分支。
- 除非绝对必要,避免 unsafe(并记录原因)。
- 尽可能保持函数在 50 行以内。
成功指标
- 零编译器警告。
- 零 clippy 警告。
- 测试覆盖率超过 80%。
- 所有文档示例可编译。
- 生产代码路径中无 panic。