Comment désactiver les avertissements de code inutilisés dans Rust?

230
struct SemanticDirection;

fn main() {}
warning: struct is never used: `SemanticDirection`
 --> src/main.rs:1:1
  |
1 | struct SemanticDirection;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(dead_code)] on by default

Je réactiverai ces avertissements pour tout problème grave, mais je ne fais que bricoler la langue et cela me rend chauve-souris.

J'ai essayé d'ajouter #[allow(dead_code)]à mon code, mais cela n'a pas fonctionné.

Andrew Wagner
la source

Réponses:

353

Tu peux soit:

  • Ajouter un allowattribut sur une structure, un module, une fonction, etc.:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Ajoutez un attribut au niveau de la caisseallow ; remarquez le !:

    #![allow(dead_code)]
  • Passez le à rustc:

    rustc -A dead_code main.rs
  • Passez-le en utilisant cargovia la RUSTFLAGSvariable d'environnement:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Arjan
la source
5
Notez que le dernier déclenchera la recompilation de tout.
Joseph Garvin
RUSTFLAGS est ce dont j'avais besoin cargo test. Merci.
likebike
61

Une autre façon de désactiver cet avertissement consiste à préfixer l'identifiant en _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Cela peut être utile, par exemple, avec une fenêtre SDL:

let _window = video_subsystem.window("Rust SDL2 demo", 800, 600);

Le préfixe avec un trait de soulignement est différent de l'utilisation d'un seul trait de soulignement comme nom. Procéder comme suit détruira immédiatement la fenêtre, ce qui n'est probablement pas le comportement prévu.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
antoyo
la source
Ce comportement "attribuer un trait de soulignement le détruira" semble étrange (bien que je ne doute pas que vous ayez raison). Avez-vous une référence pour cela?
Michael Anderson
4
@MichaelAnderson Voir "RAII. Vous voudrez peut-être qu'une variable existe pour son effet secondaire destructeur, mais ne l'utilisez pas autrement. Il n'est pas possible d'utiliser simplement _ pour ce cas d'utilisation, car _ n'est pas une liaison de variable et la valeur sera supprimé à la fin de la déclaration. " de stackoverflow.com/a/48361729/109618
David J.
9

Rendre le code public arrête également les avertissements; vous aurez besoin de faire l'enclosmod .

Cela a du sens lorsque vous écrivez une bibliothèque: votre code est "inutilisé" en interne car il est destiné à être utilisé par le code client.

Vituel
la source