如何在 Rust 的板条箱级别禁用死代码警告?

问题描述 投票:0回答:13

在修改 Rust 时,我反复遇到很多死代码警告,这让我很难集中注意力。我尝试使用外部属性

#[allow(dead_code)]
,但它一次只能消除一个警告。

struct SemanticDirection;

fn main() {}
warning: struct `SemanticDirection` is never constructed
 --> src\main.rs:1:8
  |
1 | struct SemanticDirection;
  |        ^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` on by default

如何在 crate 级别禁用这些警告?

rust compiler-warnings
13个回答
795
投票

您可以:

  • 在结构体、模块、函数等上添加

    allow
    属性:

    #[allow(dead_code)]
    struct SemanticDirection;
    
  • 添加

    allow
    作为 crate 级属性;注意
    !

    #![allow(dead_code)]
    
  • 传给

    rustc
    :

    rustc -A dead_code main.rs
    
  • 使用

    cargo
    通过
    RUSTFLAGS
    环境变量传递它:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build
    

111
投票

禁用此警告的另一种方法是在标识符前面添加

_
:

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);

68
投票

将这两行放在文件顶部:

#![allow(dead_code)]
#![allow(unused_variables)]

37
投票

使代码公开也会停止警告;您还需要将封闭的

mod
公开。

当您编写库时,这是有道理的:您的代码在内部“未使用”,因为它旨在由客户端代码使用。


12
投票

另外:rust 提供四个级别的 lint(允许、警告、拒绝、禁止)。

https://doc.rust-lang.org/rustc/lints/levels.html#lint-levels


9
投票
  • 直接将以下内容放入文件的head

    #![allow(dead_code, unused_variables)]

    • dead_code
      lint 检测未使用、未导出的项目。
    • unused_variables
      lint 检测未以任何方式使用的变量。
  • 更简单的方法是将以下内容放在文件的head

    #![allow(unused)]

参考:rust lint 列表


6
投票

您可以将 #[allow(dead_code)] 属性添加到结构定义中,如下所示:

#[allow(dead_code)]
struct SemanticDirection;

或者您可以通过在文件顶部添加属性来禁用整个文件的警告,如下所示:

#![allow(dead_code)]

struct SemanticDirection;

但是这些属性只有在启用 dead_code lint 的情况下才有效。默认情况下,dead_code lint 在 Rust 中处于启用状态,但您可以通过将以下内容添加到代码顶部来禁用它:

#![deny(dead_code)]

这将禁用整个文件的 dead_code lint。

保持 dead_code lint 启用通常是一个好主意,因为它可以帮助您捕获代码中的错误并确保您不会在项目中引入不必要的代码。但是,当您只是尝试和尝试不同的东西时,它可能会很烦人,因此如果您想在这些情况下禁用它,这是可以理解的。


5
投票

对于未使用的函数,您应该将其公开,但要小心。如果该结构不是公开的,那么您仍然会收到如下错误:

//this should be public also
struct A{
   A{}
}

impl A {
    pub fn new() -> A {

    }
}

或者如果你不想公开,你应该放

#[allow(unused)]


3
投票

您始终可以通过在变量名称中添加 (_) 来禁用未使用的变量/函数,如下所示:

let _variable = vec![0; 10];

3
投票

*.rs
文件顶部:

#![allow(unused)]  // FIXME

1
投票

将其添加到第一行代码中

#![allow(unused_variables)]

所有警告解决方案:

https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html


-1
投票

其他人已经回答了如何使用

#[allow(dead_code)]
在代码中执行此操作,但如果您是像我这样的 Windows 用户,想要在命令行中执行此操作,则确切的格式略有不同。在运行任何
cargo
命令来设置环境变量之前,输入以下行:

禁用 Rust 检查死代码:

set RUSTFLAGS=-A dead_code 

禁用 Rust 检查未使用的变量:

set RUSTFLAGS=-A unused_variables 

禁用 Rust 检查死代码和未使用的变量:

set RUSTFLAGS= -A dead_code -A unused_variables

恢复 Rust 到之前的行为:

set RUSTFLAGS=

此后,Cargo 将按照您指定的方式运行,直到您关闭命令行。

如果您希望使用

'&' 分隔符
单行
上运行 set RUSTFLAGScargo 命令,以下是添加了
cargo build
的上述所有示例:

set RUSTFLAGS=-A dead_code & cargo build
set RUSTFLAGS=-A unused_variables & cargo build
set RUSTFLAGS=-A dead_code -A unused_variables & cargo build
set RUSTFLAGS=& cargo build

-8
投票

使用功能

#[cfg(feature = "dead_code")]

注意:

"dead_code"
可以替换为任何单词。

© www.soinside.com 2019 - 2024. All rights reserved.