Documentación en Rust: técnicas avanzadas y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué la documentación en Rust es más que comentarios

\n\n

El ecosistema de Rust es conocido por su rigor y fiabilidad. Sin embargo, incluso el código más elegante es inútil sin una documentación de calidad. A nivel básico, basta con escribir un par de líneas /// para funciones públicas. Pero cuando tu proyecto crece hasta abarcar varios crates con decenas de módulos, surge la cuestión de las técnicas avanzadas de documentación.

\n\n

En este artículo, exploraremos herramientas y técnicas que te ayudarán a crear documentación de nivel empresarial: desde pruebas automáticas de ejemplos hasta generación de libros e integración con CI/CD.

\n\n

1. Doctests: documentación que no miente

\n\n

La principal característica de rustdoc es la capacidad de incrustar ejemplos de código ejecutables directamente en los comentarios. Estos ejemplos se compilan y ejecutan automáticamente al ejecutar cargo test. Esto garantiza que tu documentación esté siempre actualizada.

\n\n

Doctest básico

\n
/// Devuelve la suma de dos números.\n///\n/// # Ejemplo\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 avanzadas con doctest

\n

Puedes ocultar líneas de preparación que no deben mostrarse en la documentación usando # :

\n
/// # Ejemplo con inicialización\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

También puedes verificar que el código no compile (por ejemplo, para demostrar errores en tiempo de compilación):

\n
/// ```compile_fail\n/// let x: i32 = "cadena"; // Error: tipo incompatible\n/// ```
\n\n

2. Atributos de documentación: control y metadatos

\n\n

Los atributos #[doc(...)] permiten ajustar finamente la visualización de la documentación.

\n\n

Ocultar elementos

\n
/// Función interna, no destinada para uso público.\n#[doc(hidden)]\npub fn internal_helper() {}
\n\n

Categorización y búsqueda

\n
/// Grupo de utilidades para trabajar con redes.\n#[doc(alias = "net")]\n#[doc(alias = "socket")]\npub mod network {\n    // ...\n}
\n\n

Incrustar documentación desde otra ubicación

\n
/// Consulte la [documentación del módulo](index.html) para información general.\n#[doc(include = "docs/faq.md")]\npub fn complex_function() {}
\n\n

3. Referencias cruzadas y navegación

\n\n

Rustdoc admite enlaces a otros elementos de la documentación. Esto crea una estructura coherente y fácil de leer.

\n\n

Enlaces a funciones y tipos

\n
/// Use [`Config::new`] para crear una instancia.\n///\n/// Para una configuración más compleja, consulte el módulo [`config`].\npub struct Config { /* ... */ }
\n\n

Enlaces a crates externos

\n
/// Esta función utiliza [serde_json] para la serialización.\n///\n/// [serde_json]: https://docs.rs/serde_json\npub fn to_json() {}
\n\n

4. Herramientas para proyectos grandes: mdBook y documentación de crates

\n\n

Cuando un solo cargo doc ya no es suficiente, mdBook viene al rescate: una utilidad para crear libros a partir de archivos Markdown. Es ideal para escribir guías, tutoriales y documentación arquitectónica.

\n\n

Inicio rápido con mdBook

\n
# Instalación\ncargo install mdbook\n\n# Crear proyecto\nmdbook init my-book\ncd my-book\nmdbook serve --open
\n\n

Integración con rustdoc

\n

Puede incrustar documentación de mdBook en cargo doc usando el atributo #[doc = include_str!()]:

\n
/// # Arquitectura\n///\n/// Descripción detallada de la arquitectura de la biblioteca:\n///\n#[doc = include_str!("../docs/architecture.md")]\npub mod core {\n    // ...\n}
\n\n

Conclusión

Blogs

Book Recommendations