铁锈警告未使用的私人物品:
warning: function is never used: `hmm`
--> src/example.rs:357:1
|
357 | fn hmm() {
| ^^^^^^^^
|
= note: #[warn(dead_code)] on by default
我有一些标记为pub
的代码,我知道该代码未被使用。如何让编译器对此发出警告?
这是在一个库和一系列二进制文件的上下文中,全部都在同一工作区中。该库仅由那些二进制文件使用;该库不会被其他任何人占用,并且我也不会上传到crates.io,所以我对所使用的代码有充分的了解。
答案 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(...)
说明符,诸如未使用代码之类的诊断也能工作未使用。