SuperAPI AI 工具集

handling-rust-errors

编程与开发

查看项目

更新于 10-15 22:12

技能介绍

用途:为 HASH 的 Rust 代码库提供一致的、可调试的错误处理模式,核心依赖 error-stack crate。

主要能力与约定:所有错误类型使用 Report<MyError>,采用具体错误类型而非 Report<Box<dyn Error>>;从 core::error:: 导入 Error(不是 std::error::);导入 ResultExt as _ 以使用 trait 方法。禁止使用 anyhow、eyre、thiserror(改用 derive_more),除测试或原型外不用 Box<dyn Error>。

使用方式:定义错误时用 derive_more 定义错误类型与枚举、实现 Error trait、构建错误层级。传播错误时用 .change_context() 与 .change_context_with() 转换错误,用 .attach() 与 .attach_with() 添加上下文;.attach_with 适合昂贵操作,惰性求值。创建错误示例:return Err(Report::new(MyError::NotFound)).attach(format!("ID: {}", id)); 传播示例:some_result.change_context(MyError::OperationFailed).attach("Additional context")?; 文档方面需为可失败函数写 # Errors 段、链接错误变体、记录运行时错误并测试错误条件。

例外:libs/@local/hashql/* 编译器代码使用 hashql-diagnostics crate,以支持源码跨度、多标签区域、修复建议与严重级别;HashQL 的基础设施代码(CLI、文件 I/O、配置)仍用 error-stack。

适用场景:HASH 中除 HashQL 编译器诊断外的 Rust 错误定义、传播与文档编写。限制:仅适用于该代码库约定,其他项目未必适用;具体 API 细节以官方文档为准。