gpt4 book ai didi

rust - 我怎样才能让编译器警告我标记为 pub 的未使用代码?

转载 作者:行者123 更新时间:2023-11-29 07:56:50 31 4
gpt4 key购买 nike

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,所以我完全了解正在使用的代码。

最佳答案

您不能启用任何东西来执行此操作。根据定义,如果某些东西在你的箱子之外是公开的,那么它可能会被导入你的箱子的箱子使用;编译器无法真正分辨。这是拥有一个公共(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

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


在工作区的特定情况下,从来没有一个编译器调用知道“一切”的时候。例如,如果您的库导出 fn a()fn b() 并且一个二进制文件使用 a 而另一个二进制文件使用 b ,那么库的编译或任何一个二进制文件都不会看到全貌。 “最好”的情况是得到大量的误报。

在类似的情况下,我采取了从 API 中删除所有 public 并编译以查看错误/使用的函数的方法。

一个名为 warnalyzer 的工具可能在这种情况下有所帮助。它使用一些不稳定的编译器功能来保存来自中间编译器调用的文件,然后聚合它们以识别未使用的代码。目前它有一些误报,但它可能作为指南很有用。

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com