¿Cómo deshabilitar las advertencias de código no utilizadas en 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

Volveré a activar estas advertencias para cualquier cosa grave, pero solo estoy jugando con el lenguaje y esto me está volviendo loco.

Intenté agregar #[allow(dead_code)]a mi código, pero eso no funcionó.

Andrew Wagner
fuente

Respuestas:

353

Tu también puedes:

  • Agregue un allowatributo en una estructura, módulo, función, etc.

    #[allow(dead_code)]
    struct SemanticDirection;
  • Agregar un atributo de nivel de cajaallow ; observe el !:

    #![allow(dead_code)]
  • Pásalo a rustc:

    rustc -A dead_code main.rs
  • Pásalo usando cargola RUSTFLAGSvariable de entorno:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Arjan
fuente
55
Tenga en cuenta que el último activará la recompilación de todo.
Joseph Garvin el
RUSTFLAGS es lo que necesitaba cargo test. Gracias.
likebike
61

Otra forma de deshabilitar esta advertencia es prefijar el identificador de la siguiente manera _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Esto puede ser útil, por ejemplo, con una ventana SDL:

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

Prefijar con un guión bajo es diferente de usar un guión bajo solitario como nombre. Hacer lo siguiente destruirá inmediatamente la ventana, lo cual es poco probable que sea el comportamiento previsto.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
antoyo
fuente
Ese comportamiento de "asignar un guión bajo lo destruirá" parece extraño (aunque no dudo que sea correcto). ¿Tienes una referencia para ello?
Michael Anderson el
44
@MichaelAnderson Consulte "RAII. Es posible que desee que exista una variable para su efecto secundario destructor, pero no la use de otra manera. No es posible usar simplemente _ para este caso de uso, ya que _ no es un enlace de variable y el valor sería descartado al final de la declaración ". de stackoverflow.com/a/48361729/109618
David J.
9

Hacer público el código también detiene las advertencias; también deberá hacer modpúblico el recinto.

Esto tiene sentido cuando está escribiendo una biblioteca: su código está "sin usar" internamente porque está destinado a ser utilizado por el código del cliente.

Vituel
fuente