Introdução: Por que a documentação em Rust é mais do que comentários
\n\nO 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.
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\n1. Doctests: documentação que não mente
\n\nA 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.
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\nTécnicas avançadas com doctest
\nVocê pode ocultar linhas de preparação que não devem aparecer na documentação usando # :
/// # 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\nTambé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\n2. Atributos de documentação: controle e metadados
\n\nOs atributos #[doc(...)] permitem ajustar finamente a exibição da documentação.
Ocultando elementos
\n/// Função interna, não destinada ao uso público.\n#[doc(hidden)]\npub fn internal_helper() {}\n\nCategorizaçã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\nIncorporando 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\n3. Cross-references e navegação
\n\nO Rustdoc suporta links para outros elementos da documentação. Isso cria uma estrutura coesa e fácil de ler.
\n\nLinks 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\nLinks 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\n4. Ferramentas para grandes projetos: mdBook e documentação de crate
\n\nQuando 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.
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\nIntegração com rustdoc
\nVocê pode incorporar documentação do mdBook no cargo doc usando o atributo #[doc = include_str!()]:
/// # 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