Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Annexe D : outils de développement utiles

Dans cette annexe, nous présentons quelques outils de développement utiles fournis par le projet Rust. Nous verrons le formatage automatique, des moyens rapides d’appliquer des corrections d’avertissements, un linter, et l’intégration avec les IDE.

Le formatage automatique avec rustfmt

L’outil rustfmt reformate votre code selon le style de code de la communauté. De nombreux projets collaboratifs utilisent rustfmt pour éviter les débats sur le style à utiliser lors de l’écriture de Rust : tout le monde formate son code en utilisant cet outil.

Les installations de Rust incluent rustfmt par défaut, vous devriez donc déjà avoir les programmes rustfmt et cargo-fmt sur votre système. Ces deux commandes sont analogues à rustc et cargo dans le sens où rustfmt offre un contrôle plus fin et cargo-fmt comprend les conventions d’un projet qui utilise Cargo. Pour formater n’importe quel projet Cargo, saisissez la commande suivante :

$ cargo fmt

L’exécution de cette commande reformate tout le code Rust dans la crate actuelle. Cela ne devrait modifier que le style du code, pas sa sémantique. Pour plus d’informations sur rustfmt, consultez sa documentation.

Corriger votre code avec rustfix

L’outil rustfix est inclus avec les installations de Rust et peut automatiquement corriger les avertissements du compilateur qui ont une façon claire de résoudre le problème, ce qui est probablement ce que vous souhaitez. Vous avez probablement déjà vu des avertissements du compilateur. Par exemple, considérez ce code :

Fichier : src/main.rs rust {{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs:here}}

fn main() {
    let mut x = 42;
    println!("{x}");
}

Ici, nous définissons la variable x comme mutable, mais nous ne la modifions jamais en réalité. Rust nous avertit à ce sujet :

$ cargo build
   Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: variable does not need to be mutable
 --> src/main.rs:2:9
  |
2 |     let mut x = 0;
  |         ----^
  |         |
  |         help: remove this `mut`
  |
  = note: `#[warn(unused_mut)]` on by default

L’avertissement suggère de supprimer le mot-clé mut. Nous pouvons appliquer automatiquement cette suggestion en utilisant l’outil rustfix en exécutant la commande cargo fix :

$ cargo fix
    Checking myprogram v0.1.0 (file:///projects/myprogram)
      Fixing src/main.rs (1 fix)
    Finished dev [unoptimized + debuginfo] target(s) in 0.59s

Lorsque nous regardons à nouveau src/main.rs, nous constatons que cargo fix a modifié le code :

Fichier : src/main.rs rust {{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs:here}}

fn main() {
    let x = 42;
    println!("{x}");
}

La variable x est maintenant immuable, et l’avertissement n’apparaît plus.

Vous pouvez également utiliser la commande cargo fix pour faire migrer votre code entre différentes éditions de Rust. Les éditions sont traitées dans l’annexe E.

Plus de lints avec Clippy

L’outil Clippy est une collection de lints qui analysent votre code afin que vous puissiez détecter les erreurs courantes et améliorer votre code Rust. Clippy est inclus avec les installations standard de Rust.

Pour exécuter les lints de Clippy sur n’importe quel projet Cargo, saisissez la commande suivante :

$ cargo clippy

Par exemple, imaginons que vous écrivez un programme qui utilise une approximation d’une constante mathematique, comme pi, comme le fait ce programme :

Filename: src/main.rs
fn main() {
    let x = 3.1415;
    let r = 8.0;
    println!("the area of the circle is {}", x * r * r);
}

L’exécution de cargo clippy sur ce projet produit cette erreur :

error: approximate value of `f{32, 64}::consts::PI` found
 --> src/main.rs:2:13
  |
2 |     let x = 3.1415;
  |             ^^^^^^
  |
  = note: `#[deny(clippy::approx_constant)]` on by default
  = help: consider using the constant directly
  = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant

Cette erreur vous indique que Rust dispose déjà d’une constante PI plus précise, et que votre programme serait plus correct si vous utilisiez cette constante à la place. Vous modifieriez alors votre code pour utiliser la constante PI.

Le code suivant ne produit aucune erreur ni avertissement de la part de Clippy :

Filename: src/main.rs
fn main() {
    let x = std::f64::consts::PI;
    let r = 8.0;
    println!("the area of the circle is {}", x * r * r);
}

Pour plus d’informations sur Clippy, consultez sa documentation.

Intégration avec les IDE en utilisant rust-analyzer

Pour faciliter l’intégration avec les IDE, la communauté Rust recommande d’utiliser rust-analyzer. Cet outil est un ensemble d’utilitaires centrés sur le compilateur qui utilisent le Language Server Protocol, une spécification permettant aux IDE et aux langages de programmation de communiquer entre eux. Différents clients peuvent utiliser rust-analyzer, comme le plugin Rust analyzer pour Visual Studio Code.

Visitez la page d’accueil du projet rust-analyzer pour les instructions d’installation, puis installez le support du serveur de langage dans votre IDE. Votre IDE disposera alors de fonctionnalités telles que l’autocomplétion, la navigation vers la définition, et l’affichage des erreurs en ligne.