Como desativar avisos de código não utilizados no Rust?

229
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

Vou ativar esses avisos novamente por qualquer coisa séria, mas estou apenas mexendo com a linguagem e isso está me deixando morcegos.

Tentei adicionar #[allow(dead_code)]ao meu código, mas isso não funcionou.

Andrew Wagner
fonte

Respostas:

352

Você também pode:

  • Adicione um allowatributo a uma estrutura, módulo, função, etc .:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Adicione um atributo no nível da caixaallow ; observe o !:

    #![allow(dead_code)]
  • Passe para rustc:

    rustc -A dead_code main.rs
  • Passe usando cargoa RUSTFLAGSvariável de ambiente:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Arjan
fonte
5
Observe que o último acionará a recompilação de tudo.
Joseph Garvin
RUSTFLAGS é o que eu precisava cargo test. Obrigado.
likebike
60

Outra maneira de desativar esse aviso é prefixar o identificador da seguinte maneira _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Isso pode ser útil, por exemplo, com uma janela SDL:

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

Prefixar um sublinhado é diferente de usar um sublinhado único como o nome. Fazer o seguinte destruirá imediatamente a janela, que é improvável que seja o comportamento pretendido.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
antoyo
fonte
O comportamento de "atribuir ao sublinhado o destruirá" parece estranho (embora eu não duvide que você esteja correto). Você tem uma referência para isso?
Michael Anderson
4
@MichaelAnderson Consulte "RAII. Talvez você queira que exista uma variável para o efeito colateral do destruidor, mas não a use de outra forma. Não é possível usar simplesmente _ para esse caso de uso, pois _ não é uma ligação variável e o valor seria descartado no final da declaração ". A partir de stackoverflow.com/a/48361729/109618
David J.
9

Tornar o código público também interrompe os avisos; você também precisará tornar público o anexo mod.

Isso faz sentido quando você está escrevendo uma biblioteca: seu código é "não utilizado" internamente porque se destina a ser usado pelo código do cliente.

Vituel
fonte