Introducción: Por qué la documentación en Rust no es un simple capricho
En el mundo de la programación de sistemas, Rust ocupa un lugar especial gracias a su seguridad, rendimiento y compilador estricto. Sin embargo, incluso el código más elegante es inútil si los desarrolladores no entienden cómo usarlo. La documentación es el puente entre su código y sus usuarios. En Rust, este proceso no solo se recomienda, sino que está integrado en el ecosistema a nivel de herramientas.
En este artículo, analizaremos cómo escribir documentación para un proyecto Rust desde cero: desde comentarios doc básicos hasta la creación de un libro completo con mdbook. Aprenderá a usar rustdoc, el formato Markdown y las pruebas en la documentación para que su proyecto sea claro y profesional.
Fundamentos: Documentación del código con comentarios doc
Rust ofrece dos tipos de comentarios: normales (//) y comentarios doc (/// y //!). Los comentarios doc son procesados automáticamente por la herramienta rustdoc, que genera documentación HTML. Esta es la base de cualquier proyecto Rust.
Comentarios doc para elementos públicos
Use /// para documentar funciones, estructuras, traits y módulos. Ejemplo:
/// Calcula el factorial de un número n./// /// # Argumentos/// * `n` - número entero no negativo./// /// # Devuelve/// * `u64` - el factorial del número n./// /// # Ejemplos/// ```/// let result = factorial(5);/// assert_eq!(result, 120);/// ```pub fn factorial(n: u32) -> u64 { (1..=n).product()}Observe las secciones # Argumentos, # Devuelve y # Ejemplos. Estos son encabezados estándar de Markdown que mejoran la legibilidad.
Documentación interna de módulos
Para documentar el propio módulo (archivo), use //!:
//! Módulo para operaciones matemáticas.//!//! Este módulo proporciona funciones para calcular el factorial,//! números de Fibonacci y otros algoritmos matemáticos.Técnicas avanzadas: Pruebas, enlaces y atributos
Una de las fortalezas de rustdoc es la capacidad de ejecutar el código de la documentación como pruebas. Esto garantiza que sus ejemplos estén siempre actualizados y funcionen.
Pruebas en la documentación (doctests)
Cualquier bloque de código dentro de los comentarios doc, marcado como ```rust o simplemente ```, se convierte automáticamente en una prueba al ejecutar cargo test. Ejemplo:
/// Suma dos números.////// ```/// let sum = add(2, 3);/// assert_eq!(sum, 5);/// ```pub fn add(a: i32, b: i32) -> i32 { a + b}Para ocultar líneas que no deberían estar en el ejemplo (por ejemplo, fn main()), use el atributo # :
/// ```/// # fn main() {/// let x = 42;/// assert_eq!(x, 42);/// # }/// ```Enlaces a otros elementos
Puede enlazar a otras funciones, estructuras o módulos usando la sintaxis [`nombre`]. Rustdoc creará automáticamente un hipervínculo:
/// Usa la función [`factorial`] para calcular combinaciones.Atributos de documentación
Los atributos permiten controlar el comportamiento de rustdoc:
#[doc(hidden)]— oculta el elemento de la documentación.#[doc(alias = "nombre_alternativo")]— agrega un alias para la búsqueda.#[doc(cfg(feature = "some_feature"))]— muestra la documentación solo cuando la característica está habilitada.
Ejemplo de uso de #[doc(alias)]:
#[doc(alias = "hello")]pub fn greet(name: &str) -> String { format!("Hello, {}!", name)}Generación y publicación: cargo doc y docs.rs
Cuando la documentación está escrita, debe generarse