为 Rust 项目编写文档:从基础到高级技巧
代码文档是 Rust 专业开发中不可或缺的一部分。得益于内置工具 rustdoc,创建高质量的文档变得简单而高效。在本文中,我们将探讨如何利用生态系统的所有功能,为 Rust 项目正确编写文档。
Rust 文档编写基础
Rust 使用基于 Markdown 的特殊语法来编写文档。文档通过 doc 注释编写,以 ///(用于外部文档)或 //!(用于模块的内部文档)开头。
让我们看一个基本示例:
/// 计算一个数的阶乘。////// 此函数接受一个非负整数 `n`/// 并返回其阶乘。如果 `n` 等于 0,则返回 1。////// # Examples////// ```/// let result = factorial(5);/// assert_eq!(result, 120);/// ```pub fn factorial(n: u64) -> u64 { (1..=n).product()}
//! # 数学函数模块//!//! 此模块包含基本的数学运算,//! 包括阶乘和二项式系数的计算。pub mod math;使用 rustdoc 生成文档
rustdoc 工具是 Rust 标准工具集的一部分,它会自动从 doc 注释生成 HTML 文档。要运行它,只需执行以下命令:
cargo doc --open此命令将为您的项目及其所有依赖项生成文档,然后在浏览器中打开它。您还可以指定其他标志:
--no-deps— 不包含依赖项的文档--document-private-items— 记录私有项--target-dir— 指定输出文件的目录
生成的文档会自动包含导航、搜索、指向类型和函数的链接,以及来自代码示例的测试。
Doc 注释的结构和特殊部分
Rust 中的高质量文档遵循特定的结构。建议使用以下部分:
- 简短描述 — 注释的第一行,显示在列表和搜索中
- 详细描述 — 解释函数的工作原理、其特性和限制
# Examples— 一个或多个使用示例# Panics— 函数可能导致 panic 的情况# Errors— 可能的错误及其处理# Safety— 对于 unsafe 函数:解释安全前提条件
完整函数文档的示例:
/// 根据指定的分隔符将字符串分割成部分。////// 返回一个字符串向量,这些字符串是通过/// 在每次出现 `delimiter` 时分割原始字符串 `text` 得到的。/// 结果中不包含空字符串。////// # Examples////// ```/// let result = split_string("a,b,c", ',');/// assert_eq!(result, vec!["a", "b", "c"]);/// ```////// # Panics////// 如果 `delimiter` 是空字符串,函数会 panic。////// # Errors////// 此函数不返回错误,但可能会 panic。pub fn split_string(text: &str, delimiter: char) -> Vec<String> { assert!(delimiter != '\\0', "分隔符不能是空字符"); text.split(delimiter) .filter(|s| !s.is_empty()) .map(|s| s.to_string()) .collect()}测试文档
Rust 的一大优势是能够直接在文档中测试代码示例。命令 cargo test 会自动运行 doc 注释中的所有示例。