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

Я включу эти предупреждения снова для чего-нибудь серьезного, но я просто возиться с языком, и это сводит меня с ума.

Я попытался добавить #[allow(dead_code)]в свой код, но это не сработало.

Эндрю Вагнер
источник

Ответы:

353

Вы также можете:

  • Добавить 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. Спасибо.
велосипед
61

Другой способ отключить это предупреждение - добавить префикс к идентификатору _:

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);
antoyo
источник
Такое поведение «назначение подчеркивания уничтожит его» кажется странным (хотя я не сомневаюсь, что вы правы). У вас есть ссылка на это?
Майкл Андерсон
4
@MichaelAnderson См. "RAII. Возможно, вы захотите, чтобы переменная существовала для побочного эффекта деструктора, но не используйте ее иначе. Невозможно использовать просто _ для этого варианта использования, поскольку _ не является привязкой переменной и значением будет отброшен в конце заявления ". from stackoverflow.com/a/48361729/109618
Дэвид Дж
9

Создание кода общественность также останавливает предупреждения; вам нужно будет сделать вложение также modпубличным.

Это имеет смысл, когда вы пишете библиотеку: ваш код «не используется» внутри, потому что он предназначен для использования клиентским кодом.

Vituel
источник