SuperAPI AI 工具集

implementation

编程与开发

查看项目

更新于 10-16 04:05

技能介绍

用途

该技能用于为开源 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。