rust - 如何让编译器警告我标记为 pub 的未使用代码?
问题描述
Rust 警告未使用的私有项目:
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 之外是公开的,它可能会被导入你的 crate 的 crate 使用;编译器实际上无法分辨。这是拥有公共 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)
. 二进制 crate 基本上应该没有标记为从 crate 中导出的项目。
在您的工作区的特定情况下,从来没有一个编译器调用知道“一切”的时候。例如,如果您的库导出fn a()
andfn b()
并且一个二进制文件使用a
和另一个二进制文件使用b
,那么该库或任何一个二进制文件的编译都不会看到整个画面。“最好”的情况是得到大量的误报。
在类似的情况下,我求助于从 API 中删除所有公共内容并编译以查看错误/使用的函数。
在这种情况下,一个名为warnalyzer的工具 可能会有所帮助。它使用一些不稳定的编译器功能来保存来自中间编译器调用的文件,然后聚合它们以识别未使用的代码。目前它有许多误报,但它可能作为指南有用。
推荐阅读
- java - 捕获 FileNotFoundException Java
- emacs - 使用远程(tramp)python文件但不是本地时,强制flycheck模式在emacs中关闭
- python - 如何在不使用 cypherquery() 的情况下使用 neomodel 获取两个节点之间的所有关系
- c# - 如何将一个列表复制到另一个具有 C# 中具有附加属性的对象的列表?(没有foreach)
- python - sys.getrefcount 打印差异结果,任何人都可以帮助我理解这个结果
- java - 索引 0 超出长度 0 的范围
- react-native - 如何在模型内部使用 BottomSheet
- python-3.x - 如果我没有确切的字符串但包含它的变量,如何使用 Python3 替换字符串的一部分
- sed - sed 删除包含一对 () 括号的行
- php - 使用 Imagick 在 Cpanel 上获取错误消息