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

私はこれらの警告を深刻なもののために再びオンにしますが、私は言語をいじくり回しているだけであり、これが私をコウモリに駆り立てています。

#[allow(dead_code)]コードに追加してみましたが、うまくいきませんでした。

回答:


352

次のいずれかを行うことができます。

  • 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

この警告を無効にするもう1つの方法は、次のように識別子の前に付けること_です。

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
デヴィッド・J.

9

コードを公開すると警告も停止します。あなたは囲みを作る必要がありますmodいるも公開ます。

これは、ライブラリを作成するときに意味があります。クライアントコードで使用することを目的としているため、コードは内部で「未使用」です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.