我怎样才能让编译器警告我标记为 pub 的未使用代码?
How can I get the compiler to warn me of unused code that is marked 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,因此我完全了解正在使用的代码。
您无法启用任何功能来执行此操作。根据定义,如果某些东西 public 在你的箱子之外,它可能会被导入你的箱子的箱子使用;编译器无法真正分辨。这是 public API 的一部分。从 public 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
相反,不要将事物标记为 public。相反,要么完全放弃 pub
,要么使用像 pub(crate)
这样的可见性修饰符。 Binary crates 应该基本上没有标记为从 crate 中导出的项目。
在工作区的特定情况下,从来没有一个编译器调用知道“一切”的时候。例如,如果您的库导出 fn a()
和 fn b()
并且一个二进制文件使用 a
而另一个二进制文件使用 b
,那么库或任何一个二进制文件的编译都不会看到全貌。 “最好”的情况是得到大量的误报。
在类似的情况下,我采取了从 API 中删除 一切 public 并编译以查看错误/使用的函数。
一个名为 warnalyzer 的工具可能 在这种情况下有所帮助。它使用一些不稳定的编译器功能来保存来自中间编译器调用的文件,然后聚合它们以识别未使用的代码。目前它有一些误报,但它可能作为指南很有用。
有点相关:rust issue #74970 要求在 bin crate 中将 pub
视为 pub(crate)
,这样即使更细粒度的 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,因此我完全了解正在使用的代码。
您无法启用任何功能来执行此操作。根据定义,如果某些东西 public 在你的箱子之外,它可能会被导入你的箱子的箱子使用;编译器无法真正分辨。这是 public API 的一部分。从 public 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
相反,不要将事物标记为 public。相反,要么完全放弃 pub
,要么使用像 pub(crate)
这样的可见性修饰符。 Binary crates 应该基本上没有标记为从 crate 中导出的项目。
在工作区的特定情况下,从来没有一个编译器调用知道“一切”的时候。例如,如果您的库导出 fn a()
和 fn b()
并且一个二进制文件使用 a
而另一个二进制文件使用 b
,那么库或任何一个二进制文件的编译都不会看到全貌。 “最好”的情况是得到大量的误报。
在类似的情况下,我采取了从 API 中删除 一切 public 并编译以查看错误/使用的函数。
一个名为 warnalyzer 的工具可能 在这种情况下有所帮助。它使用一些不稳定的编译器功能来保存来自中间编译器调用的文件,然后聚合它们以识别未使用的代码。目前它有一些误报,但它可能作为指南很有用。
有点相关:rust issue #74970 要求在 bin crate 中将 pub
视为 pub(crate)
,这样即使更细粒度的 pub(...)
不使用说明符。