用途:规范 WebUI 中新增、修改或评审错误路径时的做法,覆盖构建期编写错误、解析器/处理器失败、CLI 校验错误,以及暴露给 FFI/WASM/Node 宿主或工具、智能体的错误。核心要求是错误可恢复、可操作、可被机器消费。
主要能力与约定:一,可恢复输入(模板/CSS/路由编写错误、CLI 输入错误、非法状态)必须返回 Result,禁止 panic!/unwrap()/expect();unwrap/expect/todo!/unimplemented!/dbg! 由 clippy 拦截,panic! 靠评审约束。二,错误类型分层:库 crate 用 thiserror 自定义枚举,二进制 crate 用 anyhow,需要分支判断时用带 hint() 与 exit_code() 的类型化错误;各层 Display 只描述自身,靠 #[source] 链传递,并提供扁平 chain_message()。三,编写错误统一为 ParserError::Template(Box<Diagnostic>),Diagnostic 含稳定 code(视为 API)、title、location(字节偏移生成 rustc 风格定位)、snippet 与 help。四,帮助信息可操作,拼写错误用 suggest::closest_match 提示(如 eahc 提示 each),组件名建议需加前缀保护。五,颜色只允许在入口点使用 console::style(),库、FFI、浏览器、SSE 与 JSON 一律输出纯文本。
使用方式:CLI 支持全局 --format json,逐条输出 {severity, code, message, file, line, column, snippet, help, chain},应以 code 分支而非文案。退出码遵循 sysexits.h:65 数据/编写错误、66 缺输入、69 端口占用、74 I/O、2 用法、1 其它。错误构造标记 #[cold] + #[inline(never)] 以免污染热路径代码布局,可用 cargo bench -p <crate> 验证。
适用场景:新增错误、评审错误路径、为工具或智能体提供机器可读诊断。限制:部分规则(如 panic!、核心逻辑禁用正则)仅靠评审执行;本文未提供完整安装命令与更多平台细节。