Geração e Teste de Documentação Cargo

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, pode utilizar cargo doc para construir a documentação em target/doc. Também pode utilizar cargo test para executar todos os testes, incluindo testes de documentação, e cargo test --doc para executar apenas os testes de documentação. Os comentários de documentação, denotados por ///, são compilados em documentação pelo rustdoc e suportam Markdown. Estes comentários são úteis para documentar código em grandes projetos. Atributos de documentação, como inline, no_inline e hidden, são frequentemente utilizados com rustdoc. O rustdoc é amplamente utilizado pela comunidade para gerar documentação, incluindo a documentação da biblioteca padrão.

Nota: Se o laboratório não especificar um nome de ficheiro, pode utilizar qualquer nome de ficheiro que desejar. Por exemplo, pode utilizar main.rs, compilá-lo e executá-lo com rustc main.rs && ./main.

Documentação

Utilize cargo doc para construir a documentação em target/doc.

Utilize cargo test para executar todos os testes (incluindo testes de documentação) e cargo test --doc para executar apenas os testes de documentação.

Estes comandos invocarão apropriadamente rustdoc (e rustc) conforme necessário.

Comentários de Documentação

Comentários de documentação são muito úteis para grandes projetos que exigem documentação. Quando o rustdoc é executado, estes são os comentários que são compilados na documentação. São denotados por /// e suportam [Markdown].

#![crate_name = "doc"]

/// Um ser humano é representado aqui
pub struct Person {
    /// Uma pessoa deve ter um nome, não importa o quanto Julieta possa odiá-lo
    name: String,
}

impl Person {
    /// Retorna uma pessoa com o nome que lhe foi dado
    ///
    /// ## Argumentos
    ///
    /// * `name` - Uma fatia de string que contém o nome da pessoa
    ///
    /// ## Exemplos
    ///
    /// ```
    /// // Pode ter código Rust entre as delimitações dentro dos comentários
    /// // Se passar --test para `rustdoc`, ele até o testará para si!
    /// use doc::Person;
    /// let person = Person::new("name");
    /// ```
    pub fn new(name: &str) -> Person {
        Person {
            name: name.to_string(),
        }
    }

    /// Dá um cumprimento amigável!
    ///
    /// Diz "Olá, [nome](Person::name)" à `Person` em que é chamado.
    pub fn hello(&self) {
        println!("Olá, {}!", self.name);
    }
}

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

    john.hello();
}

Para executar os testes, primeiro compile o código como uma biblioteca e, em seguida, indique ao rustdoc onde encontrar a biblioteca para que possa ligá-la a cada programa de teste de documentação:

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

Atributos de Documentação

Segue-se alguns exemplos dos atributos #[doc] mais comuns utilizados com rustdoc.

inline

Utilizado para incorporar a documentação, em vez de ligar para uma página separada.

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

/// Documentação de bar
mod bar {
    /// Documentação para Bar
    pub struct Bar;
}

no_inline

Utilizado para evitar a ligação a uma página separada ou a qualquer lugar.

// Exemplo de libcore/prelude
#[doc(no_inline)]
pub use crate::mem::drop;

hidden

Utilizar isto indica ao rustdoc que não deve incluir isto na documentação:

// Exemplo da biblioteca futures-rs
#[doc(hidden)]
pub use self::async_await::*;

Para documentação, o rustdoc é amplamente utilizado pela comunidade. É o que é usado para gerar a documentação da biblioteca padrão.

Resumo

Parabéns! Concluiu o laboratório de Documentação. Pode praticar mais laboratórios no LabEx para melhorar as suas competências.