Documentação em Rust: técnicas e ferramentas avançadas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que a documentação em Rust é mais do que comentários

\n\n

O ecossistema Rust é conhecido por seu rigor e confiabilidade. No entanto, mesmo o código mais elegante é inútil sem documentação de qualidade. No nível inicial, basta escrever algumas linhas /// para funções públicas. Mas quando seu projeto cresce para vários crates com dezenas de módulos, surge a questão das técnicas avançadas de documentação.

\n\n

Neste artigo, exploraremos ferramentas e técnicas que ajudarão você a criar documentação de nível empresarial: desde testes automáticos de exemplos até geração de livros e integração com CI/CD.

\n\n

1. Doctests: documentação que não mente

\n\n

A principal "sacada" do rustdoc é a capacidade de incorporar exemplos de código executáveis diretamente nos comentários. Esses exemplos são automaticamente compilados e executados ao rodar cargo test. Isso garante que sua documentação esteja sempre atualizada.

\n\n

Doctest básico

\n
/// Retorna a soma de dois números.\n///\n/// # Exemplo\n///\n/// ```\n/// let result = my_crate::add(2, 3);\n/// assert_eq!(result, 5);\n/// ```\npub fn add(a: i32, b: i32) -> i32 {\n    a + b\n}
\n\n

Técnicas avançadas com doctest

\n

Você pode ocultar linhas de preparação que não devem aparecer na documentação usando # :

\n
/// # Exemplo com inicialização\n///\n/// ```\n/// # use std::collections::HashMap;\n/// let mut map = HashMap::new();\n/// map.insert("key", 42);\n/// assert_eq!(map.get("key"), Some(&42));\n/// ```
\n\n

Também é possível verificar se o código não compila (por exemplo, demonstrando erros de tempo de compilação):

\n
/// ```compile_fail\n/// let x: i32 = "string"; // Erro: incompatibilidade de tipos\n/// ```
\n\n

2. Atributos de documentação: controle e metadados

\n\n

Os atributos #[doc(...)] permitem ajustar finamente a exibição da documentação.

\n\n

Ocultando elementos

\n
/// Função interna, não destinada ao uso público.\n#[doc(hidden)]\npub fn internal_helper() {}
\n\n

Categorização e pesquisa

\n
/// Grupo de utilitários para trabalhar com rede.\n#[doc(alias = "net")]\n#[doc(alias = "socket")]\npub mod network {\n    // ...\n}
\n\n

Incorporando documentação de outro local

\n
/// Veja a [documentação do módulo](index.html) para informações gerais.\n#[doc(include = "docs/faq.md")]\npub fn complex_function() {}
\n\n

3. Cross-references e navegação

\n\n

O Rustdoc suporta links para outros elementos da documentação. Isso cria uma estrutura coesa e fácil de ler.

\n\n

Links para funções e tipos

\n
/// Use [`Config::new`] para criar uma instância.\n///\n/// Para configuração mais complexa, consulte o módulo [`config`].\npub struct Config { /* ... */ }
\n\n

Links para crates externos

\n
/// Esta função usa [serde_json] para serialização.\n///\n/// [serde_json]: https://docs.rs/serde_json\npub fn to_json() {}
\n\n

4. Ferramentas para grandes projetos: mdBook e documentação de crate

\n\n

Quando apenas cargo doc não é suficiente, o mdBook vem em socorro — uma ferramenta para criar livros a partir de arquivos Markdown. É ideal para escrever guias, tutoriais e documentação de arquitetura.

\n\n

Início rápido com mdBook

\n
# Instalação\ncargo install mdbook\n\n# Criando um projeto\nmdbook init my-book\ncd my-book\nmdbook serve --open
\n\n

Integração com rustdoc

\n

Você pode incorporar documentação do mdBook no cargo doc usando o atributo #[doc = include_str!()]:

\n
/// # Arquitetura\n///\n/// Descrição detalhada da arquitetura da biblioteca:\n///\n#[doc = include_str!("../docs/architecture.md")]\npub mod core {\n    // ...\n}
\n\n

Conclusão

Blogs

Book Recommendations