我如何让编译器向我警告标为pub的未使用代码?

时间:2018-08-01 14:44:55

标签: rust compiler-warnings

铁锈警告未使用的私人物品:

warning: function is never used: `hmm`
   --> src/example.rs:357:1
    |
357 | fn hmm() {
    | ^^^^^^^^
    |
    = note: #[warn(dead_code)] on by default

我有一些标记为pub的代码,我知道该代码未被使用。如何让编译器对此发出警告?

这是在一个库和一系列二进制文件的上下文中,全部都在同一工作区中。该库仅由那些二进制文件使用;该库不会被其他任何人占用,并且我也不会上传到crates.io,所以我对所使用的代码有充分的了解。

2 个答案:

答案 0 :(得分:7)

您无法启用任何功能。根据定义,如果在您的板条箱之外是公共物品,则导入您的板条箱的板条箱可能会使用这些内容;编译器实际上无法告诉。这是拥有公共API 的一部分。从公共API中删除内容是一项重大突破。

如果您的商品不是从板条箱中导出的,则该商品的pub无关紧要:

mod foo {
    pub fn bar() {}
}

fn main() {}
warning: function is never used: `bar`
 --> src/main.rs:2:5
  |
2 |     pub fn bar() {}
  |     ^^^^^^^^^^^^
  |
  = note: #[warn(dead_code)] on by default

相反,不要将事物标记为公开。相反,要么完全不使用pub,要么使用像pub(crate)这样的可见性修饰符。二进制板条箱基本上应该没有标记为要从板条箱中导出的项目。


在您特定的工作空间中,从来没有一个编译器知道“所有”信息。例如,如果您的库导出了fn a()fn b(),而一个二进制文件使用了a,另一个二进制文件使用了b,则该库的任何编译或任何一个二进制文件都不会看到整个图片。最好的情况将是大量误报。

在类似情况下,我采取了从API移除一切的方式,并进行编译以查看错误/使用的功能。

答案 1 :(得分:0)

有点相关:rust issue #74970 要求 pub 在 bin crates 中被视为 pub(crate),这样即使使用更细粒度的 pub(...) 说明符,诸如未使用代码之类的诊断也能工作未使用。