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.

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

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);

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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.