Contactez-nous

Générer et consulter la documentation avec `cargo doc --open`

Apprenez à utiliser `cargo doc --open` pour générer la documentation HTML de votre projet Rust et l'ouvrir instantanément dans votre navigateur pour une consultation facile.

`cargo doc` : l'outil de génération de documentation de Rust

Rust place une grande importance sur la documentation et fournit des outils de premier ordre pour la créer et la gérer. Au coeur de ce système se trouve `cargo doc`, une sous-commande de Cargo, le gestionnaire de paquets et système de build de Rust. `cargo doc` utilise l'outil `rustdoc` pour analyser vos commentaires de documentation (ceux commençant par `///` ou `//!`) et générer une documentation HTML complète et navigable pour votre projet et ses dépendances.

Lorsque vous écrivez des commentaires de documentation en Markdown directement dans votre code source, `cargo doc` les transforme en un site web consultable. Cela permet de garder la documentation proche du code, facilitant sa maintenance et assurant sa pertinence. La documentation générée est non seulement destinée aux utilisateurs de votre bibliothèque, mais elle est aussi une ressource précieuse pour les membres de l'équipe et pour vous-même lorsque vous revisitez votre code.

Comprendre comment utiliser `cargo doc` et ses options est essentiel pour exploiter pleinement les capacités de documentation de Rust et pour partager efficacement la connaissance de votre API.

Générer la documentation avec `cargo doc`

La commande de base pour générer la documentation de votre projet (crate) est simple. Depuis la racine de votre projet Cargo, exécutez :

cargo doc

En réponse à cette commande, Cargo va :

  1. Analyser les dépendances : Si nécessaire, il va télécharger et compiler les dépendances de votre projet.
  2. Compiler votre crate : Il compile votre propre code, en prêtant une attention particulière aux commentaires de documentation.
  3. Exécuter `rustdoc` : L'outil `rustdoc` est invoqué pour traiter les commentaires de documentation de votre crate ainsi que ceux des dépendances publiques. Il convertit le Markdown en HTML, gère les liens entre les items, crée des index, etc.
  4. Stocker les résultats : La documentation HTML générée est placée dans le sous-répertoire `target/doc` de votre projet. A l'intérieur de ce répertoire, vous trouverez un dossier portant le nom de votre crate, contenant sa documentation, ainsi que des dossiers pour chaque dépendance documentée.

Par exemple, si votre crate s'appelle `mon_super_projet`, sa documentation sera typiquement dans `target/doc/mon_super_projet/index.html`. La documentation de ses dépendances sera dans des répertoires frères.

La documentation inclut :

  • Une page d'accueil pour chaque crate.
  • Des pages pour chaque module, struct, enum, fonction, trait, macro, etc.
  • Une barre de recherche pour trouver rapidement des items.
  • Des liens croisés entre les différents éléments de l'API.
  • L'affichage des signatures de fonctions, des champs de structs, des variantes d'enums, etc.
  • Les exemples de code fournis dans les commentaires (qui sont également testables via `cargo test`).

Consulter la documentation instantanément avec `cargo doc --open`

Bien que `cargo doc` génère la documentation, il ne l'ouvre pas automatiquement. Pour générer la documentation ET l'ouvrir immédiatement dans votre navigateur web par défaut, vous pouvez utiliser l'option `--open` :

cargo doc --open

Cette commande effectue les mêmes étapes que `cargo doc`, mais à la fin du processus, elle tente d'ouvrir le fichier `index.html` principal de la documentation de votre crate (par exemple, `target/doc/votre_crate/index.html`) dans votre navigateur.

C'est une fonctionnalité extrêmement pratique car elle vous permet de :

  • Vérifier rapidement le rendu : Vous pouvez voir immédiatement à quoi ressemble votre documentation et si le formatage Markdown est correct.
  • Naviguer facilement : Vous pouvez tester les liens, utiliser la recherche et vous assurer que la structure de la documentation est logique.
  • Obtenir un feedback immédiat : C'est un excellent moyen de relire votre documentation comme le ferait un utilisateur final.

Si vous travaillez sur la documentation d'un module spécifique ou d'une fonction et que vous voulez voir rapidement les changements, `cargo doc --open` devient un outil indispensable dans votre flux de travail. Vous modifiez vos commentaires `///` ou `//!`, vous exécutez `cargo doc --open`, et vous voyez le résultat.

Options utiles avec `cargo doc`

Outre `--open`, `cargo doc` accepte d'autres options qui peuvent être utiles :

  • `--no-deps` : Si vous ne souhaitez générer la documentation que pour votre crate local et non pour ses dépendances (ce qui peut accélérer la génération), utilisez :
cargo doc --no-deps --open
  • `-p ` ou `--package ` : Dans un workspace Cargo contenant plusieurs crates, cette option permet de générer la documentation pour un paquet spécifique :
cargo doc -p mon_autre_crate --open
  • `--document-private-items` : Par défaut, `rustdoc` ne documente que les items publics (`pub`). Si vous souhaitez également inclure les items privés dans la documentation générée (utile pour la documentation interne d'une équipe), vous pouvez utiliser cette option :
cargo doc --document-private-items --open
  • `--target ` : Pour générer la documentation pour une architecture cible spécifique.

La documentation générée par `cargo doc` est statique (fichiers HTML, CSS, JS), ce qui signifie que vous pouvez facilement la déployer sur un serveur web pour la partager avec d'autres. Des plateformes comme `docs.rs` utilisent d'ailleurs `cargo doc` pour héberger automatiquement la documentation de tous les crates publiés sur `crates.io`.

En résumé, `cargo doc --open` est une commande simple mais puissante qui fluidifie le processus d'écriture et de vérification de la documentation en Rust. Elle encourage les bonnes pratiques de documentation en rendant le résultat de vos efforts immédiatement visible et accessible, contribuant ainsi à la création de bibliothèques et d'applications Rust de haute qualité.