Vil*_*lda 5 rust rust-cargo rust-clippy
我注意到为了使一段代码不被归类为死代码,它必须可以从所有二进制文件中访问。例子:
Cargo.toml:
[[bin]]
name = "main_one"
path = "src/main_one.rs"
[[bin]]
name = "main_two"
path = "src/main_two.rs"
main_one.rs:
mod utils;
fn main() {
print!("Hello, ");
utils::function_in_question();
}
main_two.rs:
mod utils;
fn main() {
print!("Hello, ");
// utils::function_in_question();
}
utils.rs:
pub fn function_in_question() {
println!("world!");
}
Run Code Online (Sandbox Code Playgroud)
这报告function_in_question
为死代码,即使它可以从main_one.rs
. 取消注释可解决此问题。如果它仅存在于main_two.rs
.
虽然这种行为背后有一些基本原理,但让 VSCode 一直抱怨这一点是很容易的 + Clippy 的输出被这些警告发送垃圾邮件。是否有至少在全球范围内抑制死代码检测的解决方案?应避免使用货物工作空间重构整个项目。
tre*_*tcl 10
这是因为你不编译utils.rs
只有一次-你编译两次,第一次作为的一部分main_one
,然后作为的一部分main_two
。
我熟悉的模式是将常用项放入 中lib.rs
,默认情况下将其编译到与您的项目同名的库 crate 中。然后,不要将它们包含在每个二进制文件中mod
,而只需使用库 crate。
# Cargo.toml
[package]
name = "my_crate" # <- will be the name of the library crate
version = "0.1.0"
[dependencies]
# No need for [[bin]] sections if you put the binary sources in src/bin
Run Code Online (Sandbox Code Playgroud)
// src/lib.rs
pub fn function_in_question() {
println!("world!");
}
Run Code Online (Sandbox Code Playgroud)
// src/bin/main_one.rs
fn main() {
print!("Hello, ");
my_crate::function_in_question();
}
Run Code Online (Sandbox Code Playgroud)
// src/bin/main_two.rs
fn main() {
print!("Hello, ");
// my_crate::function_in_question();
}
Run Code Online (Sandbox Code Playgroud)
库 crate 只会编译一次,因为它function_in_question
是 crate 公共 API 的一部分,所以您不会看到死代码警告。
请注意,如果将二进制文件放在; 中[[bin]]
,Cargo.toml
则不需要部分src/bin
。看到这个问题了解更多。
归档时间: |
|
查看次数: |
318 次 |
最近记录: |