Rust会警告未使用的私有(private)物品:

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

我有一些未标记为pub的代码。我如何让编译器对此发出警告?

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

最佳答案

您无法启用任何功能来执行此操作。根据定义,如果您的 crate 之外有公共(public)物品,则导入您的 crate 的 crate 可能会使用它;编译器实际上无法告知。这是拥有公共(public)API的一部分。从公共(public)API中删除内容是一项重大更改。
如果您的商品不是从 crate 中导出的,则它的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)这样的可见性修饰符。二进制 crate 基本上应该没有标记要从 crate 中导出的项目。

在您的工作区特定情况下,永远不会有一个编译器调用知道“一切”。例如,如果您的库导出fn a()fn b(),而一个二进制文件使用a,而另一个二进制文件使用b,则该库的任何编译或任何一个二进制文件都不会看到整个图片。 “最好的”情况将是大量误报。
在类似情况下,我采取了从API删除所有公共(public)内容并进行编译以查看错误/使用过的功能的方法。
在这种情况下,称为warnalyzer 的工具可能会对有所帮助。它使用一些不稳定的编译器功能来保存来自中间编译器调用的文件,然后对其进行汇总以标识未使用的代码。目前,它有许多误报,但它可能对指导工作很有用。

关于rust - 我如何让编译器向我警告标为pub的未使用代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51636225/

10-11 22:10
查看更多