Bagaimana cara menonaktifkan peringatan kode yang tidak digunakan di 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

Saya akan mengaktifkan kembali peringatan ini untuk hal yang serius, tetapi saya hanya mengutak-atik bahasa dan ini membuat saya kelelawar.

Saya mencoba menambahkan #[allow(dead_code)]kode saya, tetapi itu tidak berhasil.

Andrew Wagner
sumber

Jawaban:

353

Anda dapat:

  • Tambahkan allowatribut pada struct, modul, fungsi, dll .:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Tambahkan atribut tingkat-petiallow ; perhatikan !:

    #![allow(dead_code)]
  • Serahkan ke rustc:

    rustc -A dead_code main.rs
  • Menyebarkannya menggunakan cargomelalui RUSTFLAGSvariabel lingkungan:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
Arjan
sumber
5
Perhatikan bahwa yang terakhir akan memicu kompilasi ulang segalanya.
Joseph Garvin
RUSTFLAGS adalah apa yang saya butuhkan cargo test. Terima kasih.
likebike
61

Cara lain untuk menonaktifkan peringatan ini adalah dengan mengawali pengidentifikasi dengan _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Ini bisa bermanfaat, misalnya, dengan jendela SDL:

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

Awalan dengan garis bawah berbeda dengan menggunakan garis bawah sendirian sebagai namanya. Melakukan hal berikut akan segera menghancurkan jendela, yang sepertinya bukan perilaku yang diinginkan.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);
antoyo
sumber
Perilaku "menugaskan ke garis bawah akan menghancurkannya" tampaknya aneh (meskipun saya tidak ragu Anda benar). Apakah Anda punya referensi untuk itu?
Michael Anderson
4
@MichaelAnderson Lihat "RAII. Anda mungkin ingin memiliki variabel yang ada untuk efek samping penghancurnya, tetapi tidak menggunakannya sebaliknya. Tidak mungkin menggunakan hanya _ untuk kasus penggunaan ini, karena _ bukan variabel yang mengikat dan nilai akan dijatuhkan pada akhir pernyataan. " dari stackoverflow.com/a/48361729/109618
David J.
9

Membuat kode publik juga berhenti peringatan; Anda juga harus menjadikannya sebagai modpublik.

Ini masuk akal ketika Anda menulis perpustakaan: kode Anda "tidak digunakan" secara internal karena itu dimaksudkan untuk digunakan oleh kode klien.

Vituel
sumber