Come disabilitare gli avvisi di codice non utilizzati in 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

Riaccenderò questi avvertimenti per qualsiasi cosa seria, ma sto solo armeggiando con la lingua e questo mi sta facendo impazzire.

Ho provato ad aggiungere #[allow(dead_code)]al mio codice, ma non ha funzionato.

Risposte:


353

Puoi:

  • Aggiungi un allowattributo su una struttura, un modulo, una funzione, ecc .:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Aggiungi un attributo a livello di cassaallow ; notare il !:

    #![allow(dead_code)]
  • Passalo a rustc:

    rustc -A dead_code main.rs
  • Passalo usando cargotramite la RUSTFLAGSvariabile d'ambiente:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build

5
Nota che l'ultimo attiverà la ricompilazione di tutto.
Joseph Garvin,

RUSTFLAGS è ciò di cui avevo bisogno cargo test. Grazie.
likebike,

61

Un altro modo per disabilitare questo avviso è aggiungere il prefisso all'identificatore tramite _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Questo può essere utile, ad esempio, con una finestra SDL:

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

Il prefisso con un carattere di sottolineatura è diverso dall'uso di un carattere di sottolineatura solitario come nome. Fare quanto segue distruggerà immediatamente la finestra, che è improbabile che sia il comportamento previsto.

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

Quel comportamento "assegnando un trattino basso lo distruggerà" sembra strano (anche se non dubito che tu abbia ragione). Hai un riferimento per questo?
Michael Anderson,

4
@MichaelAnderson Vedi "RAII. Potresti voler avere una variabile esistente per il suo effetto collaterale distruttore, ma non usarla diversamente. Non è possibile usare semplicemente _ per questo caso d'uso, poiché _ non è un'associazione variabile e il valore verrebbe lasciato cadere alla fine della frase ". da stackoverflow.com/a/48361729/109618
David J.

9

Rendere pubblico il codice arresta anche gli avvisi; dovrai rendere modpubblico anche l'allegato .

Questo ha senso quando si scrive una libreria: il codice è "inutilizzato" internamente perché è destinato a essere utilizzato dal codice client.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.