文档

使用 cargo doctarget/doc 目录下构建文档。运行 cargo doc --open 将自动在浏览器中打开文档。

使用 cargo test 运行所有测试(包括文档测试)。如果只想运行文档测试,请使用 cargo test --doc

这些命令会根据需要适当地调用 rustdoc(和 rustc)。

文档注释

文档注释对需要文档的大型项目非常有用。运行 rustdoc 时,这些注释会被编译成文档。文档注释以 /// 开头,并支持 Markdown 语法。

#![crate_name = "doc"]

/// 这里表示一个人类
pub struct Person {
    /// 一个人必须有名字,不管朱丽叶有多么讨厌这一点
    name: String,
}

impl Person {
    /// 创建一个具有给定名字的人。
    ///
    /// # 示例
    ///
    /// ```
    /// // 你可以在注释中的代码块里编写 Rust 代码
    /// // 如果向 `rustdoc` 传递 --test 参数,它甚至会为你测试这段代码!
    /// use doc::Person;
    /// let person = Person::new("name");
    /// ```
    pub fn new(name: &str) -> Person {
        Person {
            name: name.to_string(),
        }
    }

    /// 给出友好的问候!
    ///
    /// 对调用此方法的 `Person` 说 "Hello, [name](Person::name)"。
    pub fn hello(&self) {
        println!("Hello, {}!", self.name);
    }
}

fn main() {
    let john = Person::new("John");

    john.hello();
}

要运行测试,首先将代码构建为库,然后告诉 rustdoc 库的位置,以便它可以将库链接到每个文档测试程序中:

$ rustc doc.rs --crate-type lib
$ rustdoc --test --extern doc="libdoc.rlib" doc.rs

文档属性

以下是几个与 rustdoc 配合使用的最常见 #[doc] 属性示例。

inline

用于内联文档,而非链接到单独的页面。

#[doc(inline)]
pub use bar::Bar;

/// bar 的文档
pub mod bar {
    /// Bar 的文档
    pub struct Bar;
}

no_inline

用于防止链接到单独页面或其他任何地方。

// libcore/prelude 中的示例
#[doc(no_inline)]
pub use crate::mem::drop;

hidden

使用此属性告诉 rustdoc 不要在文档中包含此内容:

// futures-rs 库中的示例
#[doc(hidden)]
pub use self::async_await::*;

在文档生成方面,rustdoc 被社区广泛使用。它是用来生成 标准库文档 的工具。

另请参阅: