Як відключити невикористані попередження коду в 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

Я поверну ці попередження для будь-якого серйозного, але я просто розмовляю з мовою, і це веде до мене кажанів.

Я спробував додати #[allow(dead_code)]свій код, але це не вийшло.

Відповіді:


350

Ви можете:

  • Додайте allowатрибут структури, модуля, функції тощо:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Додати атрибут рівня ящикаallow ; зауважте !:

    #![allow(dead_code)]
  • Передайте його rustc:

    rustc -A dead_code main.rs
  • Передайте його за cargoдопомогою RUSTFLAGSзмінної середовища:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build

5
Зауважте, що останній запустить перекомпіляцію всього.
Джозеф Гарвін

RUSTFLAGS - це те, що мені було потрібно cargo test. Дякую.
likebike

60

Інший спосіб відключення цього попередження - це префіксація ідентифікатора за допомогою _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Це може бути корисно, наприклад, у вікні SDL:

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

Префіксація підкреслення відрізняється від використання самотнього підкреслення як імені. Виконання наступних дій негайно зруйнує вікно, що навряд чи буде наміченою поведінкою.

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

Те, що поведінка "присвоєння підкреслення знищить її", видається дивним (хоча я не сумніваюся, що ви правильні). У вас є посилання на це?
Майкл Андерсон

4
@MichaelAnderson Дивіться "RAII. Можливо, ви хочете, щоб існувала змінна для її побічного ефекту деструктора, але не використовувалася інакше. Неможливо використовувати просто _ для цього випадку використання, оскільки _ не є перемінною прив'язкою і значенням буде залишено в кінці заяви ". від stackoverflow.com/a/48361729/109618
Девід Дж.

9

Створення коду громадськість також зупиняє попередження; Вам також потрібно зробити modзагальну публікацію.

Це має сенс, коли ви пишете бібліотеку: ваш код внутрішньо "не використовується", оскільки він призначений для використання клієнтським кодом.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.