Clap pour Rust : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Clap et pourquoi en a-t-on besoin ?

\n\n

Clap (Command Line Argument Parser) est une bibliothèque puissante, rapide et pratique pour analyser les arguments de la ligne de commande en langage Rust. Elle permet aux développeurs de définir facilement quels arguments, drapeaux, options et sous-commandes leur application doit accepter, de générer automatiquement l'aide (--help), de vérifier les types de données et de gérer les erreurs de saisie.

\n\n

Pourquoi a-t-on besoin de Clap ? Au lieu d'analyser manuellement std::env::args() et d'écrire des dizaines de lignes de code pour la validation, Clap fait tout le travail à votre place. Vous décrivez simplement la structure de votre CLI, et la bibliothèque se charge de l'analyse, de la génération des messages d'erreur et du formatage des indications. Clap prend en charge :

\n
    \n
  • Les arguments positionnels (obligatoires et optionnels).
  • \n
  • Les options nommées (drapeaux) avec des noms courts et longs.
  • \n
  • Les sous-commandes (comme dans git commit).
  • \n
  • L'auto-complétion pour les shells (bash, zsh, fish, PowerShell).
  • \n
  • La validation des valeurs, les valeurs par défaut, les valeurs multiples et bien plus encore.
  • \n
\n\n

Clap est la norme de facto pour la création d'applications CLI dans l'écosystème Rust. Il est utilisé dans des projets célèbres tels que cargo, ripgrep (rg), fd et bien d'autres.

\n\n

Installation

\n\n

Clap est une bibliothèque pour Rust, elle s'installe donc via le gestionnaire de paquets cargo. Ajoutez la ligne suivante à votre fichier Cargo.toml :

\n\n
[dependencies]\nclap = { version = "4.5", features = ["derive"] }
\n\n

Nous recommandons d'utiliser les macros derive (fonctionnalité derive), car c'est la manière la plus moderne et pratique de travailler avec Clap. Si vous n'avez besoin que des fonctionnalités de base sans derive, vous pouvez écrire :

\n\n
[dependencies]\nclap = "4.5"
\n\n

Après avoir ajouté la dépendance, exécutez la commande cargo build pour télécharger et compiler la bibliothèque.

\n\n

Démarrage rapide avec un exemple de code

\n\n

Créons une application simple qui accepte un nom d'utilisateur et un drapeau de salutation optionnel. Créez un nouveau projet :

\n\n
cargo new hello_clap\ncd hello_clap
\n\n

Remplacez le contenu de src/main.rs par le code suivant :

\n\n
use clap::Parser;\n\n/// Programme simple pour saluer\n#[derive(Parser)]\n#[command(name = "greeter")]\n#[command(about = "Salue l'utilisateur", long_about = None)]\nstruct Cli {\n    /// Nom de l'utilisateur\n    name: String,\n\n    /// Nombre de fois pour répéter le salut\n    #[arg(short = 'c', long = "count", default_value_t = 1)]\n    count: u8,\n}\n\nfn main() {\n    let cli = Cli::parse();\n\n    for _ in 0..cli.count {\n        println!("Bonjour, {} !", cli.name);\n    }\n}
\n\n

Exécutez maintenant le programme :

\n\n
cargo run -- Monde\n# Sortie : Bonjour, Monde !\n\ncargo run -- Monde -c 3\n# Sortie :\n# Bonjour, Monde !\n# Bonjour, Monde !\n# Bonjour, Monde !\n\ncargo run -- --help\n# Sortie de l'aide
\n\n

Comme vous pouvez le voir, Clap a automatiquement généré l'aide, traité les arguments et effectué la vérification des types (si vous passez -c sans nombre, une erreur sera générée).

\n\n

Méthodes et fonctions principales de Clap

\n\n

Examinons les méthodes et attributs clés fournis par Clap. Nous utiliserons l'approche avec les macros derive, car elle est la plus populaire.

\n\n

1. #[derive(Parser)]

\n

Ce qu'il fait : Transforme votre structure en analyseur de ligne de commande. C'est la macro principale par laquelle tout commence. Elle implémente automatiquement le trait Parser pour votre structure.

\n

Paramètres : Attributs de la structure (#[command(...)]) et des champs (#[arg(...)]).

\n

Exemple :

\n
use clap::Parser;\n\n#[derive(Parser)]\n#[command(name = "myapp")]\nstruct C                    

Recommendations