Jak wyłączyć nieużywane ostrzeżenia o kodzie w Rust?

228
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

Ponownie włączę te ostrzeżenia dla czegoś poważnego, ale po prostu majstruję przy języku, a to doprowadza mnie do szału.

Próbowałem dodać #[allow(dead_code)]do mojego kodu, ale to nie zadziałało.

Andrew Wagner
źródło

Odpowiedzi:

350

Możesz albo:

  • Dodaj allowatrybut do struktury, modułu, funkcji itp .:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Dodaj atrybut poziomu skrzyniallow ; zauważ !:

    #![allow(dead_code)]
  • Przekaż to rustc:

    rustc -A dead_code main.rs
  • Przekaż go za cargopomocą RUSTFLAGSzmiennej środowiskowej:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Arjan
źródło
5
Pamiętaj, że ostatni uruchomi ponowną kompilację wszystkiego.
Joseph Garvin
RUSTFLAGS jest tym, czego potrzebowałem cargo test. Dzięki.
likebike
60

Innym sposobem wyłączenia tego ostrzeżenia jest prefiks identyfikatora przez _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Może to być przydatne na przykład w oknie SDL:

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

Prefiks ze znakiem podkreślenia różni się od używania pojedynczego znaku podkreślenia jako nazwy. Wykonanie poniższych czynności spowoduje natychmiastowe zniszczenie okna, co prawdopodobnie nie będzie zamierzonym zachowaniem.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
antoyo
źródło
To zachowanie „przypisywanie do podkreślenia go zniszczy” wydaje się dziwne (choć nie wątpię, że masz rację). Czy masz do tego referencje?
Michael Anderson,
4
@MichaelAnderson Zobacz "RAII. Możesz chcieć mieć zmienną dla efektu ubocznego destruktora, ale nie używać jej inaczej. Nie jest możliwe użycie po prostu _ dla tego przypadku użycia, ponieważ _ nie jest powiązaniem zmiennej i wartością zostanie usunięty na końcu oświadczenia. ” from stackoverflow.com/a/48361729/109618
David J.
9

Wykonywanie kodu publicznego zatrzymuje się również ostrzeżenia; musisz modteż upublicznić załączniki.

Ma to sens, gdy piszesz bibliotekę: Twój kod jest „nieużywany” wewnętrznie, ponieważ jest przeznaczony do użycia przez kod klienta.

Vituel
źródło