为 Rust 项目编写文档:从 A 到 Z

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 Rust 中的文档并非可有可无

在系统编程的世界里,Rust 凭借其安全性、高性能和严格的编译器占据了特殊地位。然而,即使是最优雅的代码,如果开发者不理解如何使用它,也是毫无用处的。文档是连接你的代码与其用户之间的桥梁。在 Rust 中,这个过程不仅仅是推荐,而是从工具层面就内置于生态系统之中。

在本文中,我们将详细讲解如何从头开始为 Rust 项目编写文档:从基本的文档注释到使用 mdbook 创建完整的书籍。你将学习如何使用 rustdoc、Markdown 格式化和文档中的测试,使你的项目变得清晰且专业。



基础:使用文档注释为代码编写文档

Rust 提供了两种类型的注释:普通注释(//)和文档注释(/// 和 //!)。文档注释由 rustdoc 工具自动处理,该工具会生成 HTML 格式的文档。这是任何 Rust 项目的基础。



公共元素的文档注释

使用 /// 为函数、结构体、trait 和模块编写文档。示例:

/// 计算 n 的阶乘。/// /// # 参数/// * `n` - 非负整数。/// /// # 返回值/// * `u64` - n 的阶乘。/// /// # 示例/// ```/// let result = factorial(5);/// assert_eq!(result, 120);/// ```pub fn factorial(n: u32) -> u64 {    (1..=n).product()}

请注意 # 参数、# 返回值 和 # 示例 这些部分。这些是标准的 Markdown 标题,可以提高可读性。



模块的内部文档

要为模块(文件)本身编写文档,请使用 //!:

//! 数学运算模块。//!//! 该模块提供用于计算阶乘、斐波那契数列和其他数学算法的函数。


进阶技巧:测试、链接和属性

rustdoc 的一大优势是能够将文档中的代码作为测试运行。这保证了你的示例始终是最新的且可运行的。



文档测试(doctests)

文档注释中任何标记为 ```rust 或仅 ``` 的代码块,在运行 cargo test 时都会自动成为测试。示例:

/// 将两个数相加。////// ```/// let sum = add(2, 3);/// assert_eq!(sum, 5);/// ```pub fn add(a: i32, b: i32) -> i32 {    a + b}

要隐藏不应出现在示例中的行(例如 fn main()),请使用 # 属性:

/// ```/// # fn main() {/// let x = 42;/// assert_eq!(x, 42);/// # }/// ```


链接到其他元素

你可以使用 [`名称`] 语法链接到其他函数、结构体或模块。Rustdoc 会自动创建超链接:

/// 使用 [`factorial`] 函数计算组合数。


文档属性

属性允许你控制 rustdoc 的行为:

  • #[doc(hidden)] — 从文档中隐藏元素。
  • #[doc(alias = "替代名称")] — 为搜索添加别名。
  • #[doc(cfg(feature = "some_feature"))] — 仅在启用特定功能时显示文档。

使用 #[doc(alias)] 的示例:

#[doc(alias = "hello")]pub fn greet(name: &str) -> String {    format!("Hello, {}!", name)}


生成与发布:cargo doc 和 docs.rs

当文档编写完成后,需要生成它。

博客

书籍推荐