Wie deaktiviere ich nicht verwendete Code-Warnungen in Rust?

227
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

Ich werde diese Warnungen für alles Ernsthafte wieder einschalten, aber ich bastele nur an der Sprache und das treibt mich zu Fledermäusen.

Ich habe versucht #[allow(dead_code)], meinen Code zu ergänzen, aber das hat nicht funktioniert.

Andrew Wagner
quelle

Antworten:

349

Du kannst entweder:

  • Fügen Sie ein allowAttribut für eine Struktur, ein Modul, eine Funktion usw.: Hinzu .

    #[allow(dead_code)]
    struct SemanticDirection;
  • Fügen Sie eine Kiste-Level - allowAttribut ; Beachten Sie die !:

    #![allow(dead_code)]
  • Weitergeben an rustc:

    rustc -A dead_code main.rs
  • Übergeben Sie es mit cargoüber die RUSTFLAGSUmgebungsvariable:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Arjan
quelle
5
Beachten Sie, dass der letzte die Neukompilierung von allem auslöst.
Joseph Garvin
RUSTFLAGS ist das, wofür ich brauchte cargo test. Vielen Dank.
Likebike
60

Eine andere Möglichkeit, diese Warnung zu deaktivieren, besteht darin, der Kennung Folgendes voranzustellen _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Dies kann beispielsweise bei einem SDL-Fenster hilfreich sein:

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

Das Präfixieren eines Unterstrichs unterscheidet sich von der Verwendung eines einzelnen Unterstrichs als Name. Wenn Sie Folgendes tun, wird das Fenster sofort zerstört, was wahrscheinlich nicht das beabsichtigte Verhalten ist.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
Antoyo
quelle
Das Verhalten "Zuordnung zum Unterstrich wird es zerstören" scheint seltsam (obwohl ich nicht bezweifle, dass Sie richtig sind). Haben Sie eine Referenz dafür?
Michael Anderson
4
@MichaelAnderson Siehe "RAII. Möglicherweise möchten Sie eine Variable für ihren Destruktor-Nebeneffekt haben, verwenden Sie sie jedoch nicht anderweitig. Es ist nicht möglich, einfach _ für diesen Anwendungsfall zu verwenden, da _ keine Variablenbindung und der Wert ist würde am Ende der Erklärung fallen gelassen werden. " von stackoverflow.com/a/48361729/109618
David J.
9

Machen Sie den Code Öffentlichkeit hält auch die Warnungen; Sie müssen das Gehäuse machenmod öffentlich machen.

Dies ist sinnvoll, wenn Sie eine Bibliothek schreiben: Ihr Code wird intern "nicht verwendet", da er vom Clientcode verwendet werden soll.

Vituel
quelle