Introdução: Por que a documentação em Rust não é apenas um capricho
No mundo da programação de sistemas, Rust ocupa um lugar especial devido à sua segurança, desempenho e compilador rigoroso. No entanto, mesmo o código mais elegante é inútil se os desenvolvedores não entendem como usá-lo. A documentação é a ponte entre o seu código e seus usuários. Em Rust, esse processo não é apenas recomendado, mas integrado ao ecossistema a nível de ferramentas.
Neste artigo, vamos abordar como escrever documentação para um projeto Rust do zero: desde doc-comentários básicos até a criação de um livro completo com mdbook. Você aprenderá como usar rustdoc, formatação Markdown e testes na documentação para tornar seu projeto claro e profissional.
Fundamentos: Documentando código com doc-comentários
Rust oferece dois tipos de comentários: comuns (//) e doc-comentários (/// e //!). Doc-comentários são processados automaticamente pela ferramenta rustdoc, que gera documentação HTML. Esta é a base de qualquer projeto Rust.
Doc-comentários para elementos públicos
Use /// para documentar funções, estruturas, traits e módulos. Exemplo:
/// Calcula o fatorial de um número n./// /// # Argumentos/// * `n` - número inteiro não negativo./// /// # Retorna/// * `u64` - o fatorial do número n./// /// # Exemplos/// ```/// let result = factorial(5);/// assert_eq!(result, 120);/// ```pub fn factorial(n: u32) -> u64 { (1..=n).product()}Observe as seções # Argumentos, # Retorna e # Exemplos. Estes são cabeçalhos Markdown padrão que melhoram a legibilidade.
Documentação interna de módulos
Para documentar o próprio módulo (arquivo), use //!:
//! Módulo para operações matemáticas.//!//! Este módulo fornece funções para calcular fatorial,//! números de Fibonacci e outros algoritmos matemáticos.Técnicas avançadas: Testes, links e atributos
Um dos pontos fortes do rustdoc é a capacidade de executar o código da documentação como testes. Isso garante que seus exemplos estejam sempre atualizados e funcionando.
Testes na documentação (doctests)
Qualquer bloco de código dentro de doc-comentários, marcado como ```rust ou simplesmente ```, torna-se automaticamente um teste ao executar cargo test. Exemplo:
/// Soma dois números.////// ```/// let sum = add(2, 3);/// assert_eq!(sum, 5);/// ```pub fn add(a: i32, b: i32) -> i32 { a + b}Para ocultar linhas que não devem estar no exemplo (por exemplo, fn main()), use o atributo # :
/// ```/// # fn main() {/// let x = 42;/// assert_eq!(x, 42);/// # }/// ```Links para outros elementos
Você pode criar links para outras funções, estruturas ou módulos usando a sintaxe [`nome`]. O Rustdoc criará automaticamente um hiperlink:
/// Usa a função [`factorial`] para calcular combinações.Atributos de documentação
Atributos permitem controlar o comportamento do rustdoc:
#[doc(hidden)]— oculta o elemento da documentação.#[doc(alias = "nome_alternativo")]— adiciona um apelido para pesquisa.#[doc(cfg(feature = "some_feature"))]— mostra a documentação apenas quando a feature está ativada.
Exemplo de uso do #[doc(alias)]:
#[doc(alias = "hello")]pub fn greet(name: &str) -> String { format!("Hello, {}!", name)}Geração e publicação: cargo doc e docs.rs
Quando a documentação estiver escrita, ela precisa ser gerada