🚧 Attention, peinture fraîche !

Cette page a été traduite par une seule personne et n'a pas été relue et vérifiée par quelqu'un d'autre ! Les informations peuvent par exemple être erronées, être formulées maladroitement, ou contenir d'autres types de fautes.

Vous pouvez contribuer à l'amélioration de cette page sur sa Pull Request.

Annexe D - Des outils de développement utiles

Dans cette annexe, nous allons découvrir quelques outils de développement utiles que propose le projet Rust. Nous allons voir le formatage automatique, des moyens rapides pour corriger des avertissements, un analyseur statique, et l'intégration avec un IDE.

Le formatage automatique avec rustfmt

L'outil rustfmt reformate votre code suivant le style de code de la communauté. De nombreux projets collaboratifs utilisent rustfmt pour éviter des désaccords sur le style à utiliser lorsqu'ils écrivent du code Rust : tout le monde formate leur code en utilisant l'outil.

Pour installer rustfmt, saisissez ceci :

$ rustup component add rustfmt

Cette commande vous offre rustfmt et cargo-fmt, de la même manière que Rust vous installe rustc et cargo. Pour formater un projet Cargo, saisissez ceci :

$ cargo fmt

L'exécution de cette commande reformate tout le code Rust dans la crate courante. Cela va uniquement changer le style de code, pas sa sémantique. Pour plus d'informations sur rustfmt, voyez sa documentation.

Corriger votre code avec rustfix

L'outil rustfix est inclus lors de l'installation de Rust et peut automatiquement corriger certains avertissements de compilateur. Si vous avez déjà écrit du code en Rust, vous avez probablement vu des avertissements du compilateur. Par exemple, avec le code suivant :

Fichier : src/main.rs

fn fait_quelquechose() {}

fn main() {
    for i in 0..100 {
        fait_quelquechose();
    }
}

Ici, nous appelons la fonction fait_quelquechose 100 fois, mais nous n'utilisons jamais la variable i dans le corps de la boucle for. Rust nous avertit de cela :

$ cargo build
   Compiling mon_programme v0.1.0 (file:///projects/mon_programme)
warning: unused variable: `i`
 -- > src/main.rs:4:9
  |
4 |     for i in 1..100 {
  |         ^ help: consider using `_i` instead
  |
  = note: #[warn(unused_variables)] on by default

    Finished dev [unoptimized + debuginfo] target(s) in 0.50s

L'avertissement indique que nous devrions utiliser _i comme nom à sa place : le tiret bas indique que nous avons l'intention de ne pas utiliser cette variable. Nous pouvons appliquer automatiquement cette suggestion en utilisant l'outil rustfix en lançant la commande cargo fix :

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

Lorsque nous regardons à nouveau src/main.rs, nous pouvons constater que cargo fix a changé le code :

Fichier : src/main.rs

fn fait_quelquechose() {}

fn main() {
    for _i in 0..100 {
        fait_quelquechose();
    }
}

La variable de la boucle for s'appelle maintenant _i, et l'avertissement ne s'affiche plus.

Vous pouvez aussi utiliser la commande cargo fix pour corriger votre code entre différentes éditions de Rust. Les éditions sont abordées à l'annexe E.

Une analyse statique plus complète avec Clippy

L'outil Clippy est une collection d'analyses statiques pour analyser votre code afin que vous puissiez débusquer certaines erreurs courantes et ainsi améliorer votre code.

Pour installer Clippy, saisissez ceci :

$ rustup component add clippy

Pour lancer l'analyse statique de Clippy sur un projet Cargo, saisissez ceci :

$ cargo clippy

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

Fichier : src/main.rs

fn main() {
    let x = 3.1415;
    let r = 8.0;
    println!("l'aire du cercle vaut {}", x * r * r);
}

L'exécution de cargo clippy sur ce projet va afficher cette erreur :

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

Cette erreur vous fais savoir que Rust a cette constante qui est définie plus précisément et que votre programme serait plus pertinent si vous utilisiez à la place la constante. Vous changeriez alors votre code pour utiliser la constante PI. Le code suivant ne donne pas d'erreur ou d'avertissement avec Clippy :

Fichier : src/main.rs

fn main() {
    let x = std::f64::consts::PI;
    let r = 8.0;
    println!("l'aire du cercle vaut {}", x * r * r);
}

Pour en savoir plus Clippy, voyez sa documentation.

L'intégration aux IDE en utilisant le Rust Language Server

Pour aider l'intégration aux IDE, le projet Rust distribue le Rust Language Server (rls). Cet outil suit le Language Server Protocol, qui est une spécification entre les IDE et les langages pour communiquer entre eux. Différents clients peuvent utiliser le rls, comme le plug-in Rust pour Visual Studio Code.

Pour installer le rls, saisissez ceci :

$ rustup component add rls

Installez ensuite le système du language server dans votre IDE ; vous devriez obtenir des capacités supplémentaires comme l'auto-complétion, pouvoir se rendre à la définition de l'élément, et la mise en valeur d'erreurs sur la ligne concernée.

Pour plus d'information sur rls, rendez-vous Ă  sa documentation.