Introduction : Pourquoi la documentation en Rust n'est pas un simple caprice
Dans le monde de la programmation système, Rust occupe une place particulière grâce à sa sécurité, ses performances et son compilateur strict. Cependant, même le code le plus élégant est inutile si les développeurs ne comprennent pas comment l'utiliser. La documentation est le pont entre votre code et ses utilisateurs. En Rust, ce processus n'est pas simplement recommandé, il est intégré à l'écosystème au niveau des outils.
Dans cet article, nous allons voir comment rédiger la documentation pour un projet Rust de A à Z : des commentaires de documentation de base à la création d'un livre complet avec mdbook. Vous apprendrez à utiliser rustdoc, le formatage Markdown et les tests dans la documentation pour rendre votre projet clair et professionnel.
Les bases : Documenter le code avec des commentaires de documentation
Rust propose deux types de commentaires : les commentaires normaux (//) et les commentaires de documentation (/// et //!). Les commentaires de documentation sont automatiquement traités par l'outil rustdoc, qui génère une documentation HTML. C'est la base de tout projet Rust.
Commentaires de documentation pour les éléments publics
Utilisez /// pour documenter les fonctions, structures, traits et modules. Exemple :
/// Calcule la factorielle du nombre n./// /// # Arguments/// * `n` - un entier non négatif./// /// # Retourne/// * `u64` - la factorielle du nombre n./// /// # Exemples/// ```/// let result = factorial(5);/// assert_eq!(result, 120);/// ```pub fn factorial(n: u32) -> u64 { (1..=n).product()}Notez les sections # Arguments, # Retourne et # Exemples. Ce sont des en-têtes Markdown standard qui améliorent la lisibilité.
Documentation interne des modules
Pour documenter le module lui-même (le fichier), utilisez //! :
//! Module pour les opérations mathématiques.//!//! Ce module fournit des fonctions pour calculer la factorielle,//! les nombres de Fibonacci et d'autres algorithmes mathématiques.Techniques avancées : Tests, liens et attributs
L'un des points forts de rustdoc est la possibilité d'exécuter le code de la documentation comme des tests. Cela garantit que vos exemples sont toujours à jour et fonctionnels.
Tests dans la documentation (doctests)
Tout bloc de code dans les commentaires de documentation, marqué comme ```rust ou simplement ```, devient automatiquement un test lors de l'exécution de cargo test. Exemple :
/// Additionne deux nombres.////// ```/// let sum = add(2, 3);/// assert_eq!(sum, 5);/// ```pub fn add(a: i32, b: i32) -> i32 { a + b}Pour masquer les lignes qui ne doivent pas apparaître dans l'exemple (par exemple fn main()), utilisez l'attribut # :
/// ```/// # fn main() {/// let x = 42;/// assert_eq!(x, 42);/// # }/// ```Liens vers d'autres éléments
Vous pouvez faire référence à d'autres fonctions, structures ou modules avec la syntaxe [`nom`]. Rustdoc créera automatiquement un hyperlien :
/// Utilise la fonction [`factorial`] pour calculer des combinaisons.Attributs de documentation
Les attributs permettent de contrôler le comportement de rustdoc :
#[doc(hidden)]— masque l'élément de la documentation.#[doc(alias = "nom_alternatif")]— ajoute un alias pour la recherche.#[doc(cfg(feature = "some_feature"))]— affiche la documentation uniquement lorsque la fonctionnalité est activée.
Exemple d'utilisation de #[doc(alias)] :
#[doc(alias = "hello")]pub fn greet(name: &str) -> String { format!("Hello, {}!", name)}Génération et publication : cargo doc et docs.rs
Une fois la documentation rédigée, elle doit être générée