我可以告诉 Rust 编译器只忽略与特定名称匹配的文件的警告吗?
Can I tell the Rust compiler to ignore warnings only on files matching a specific name?
我正在使用一个为我生成一堆代码的库,它通常非常渴望生成我尚未使用的方法。这会导致在构建我的项目时出现一堆嘈杂的警告。
该脚本在我的代码库中生成普通的旧 .rs 文件,然后我将其导入并调用,就像普通代码一样:
mod autogen_code;
pub use self::autogen_code::*;
我不能在生成的代码上使用 #![allow(unused_whatever)]
,因为当我重建我的项目时,生成脚本会再次运行,任何更改都会消失。这些文件是 .gitignore
',并且在顶部有大注释说 "This is all auto-generated. Do not touch."
我不想让未使用的东西出现在我的整个项目中,因此将 #![allow(unused_whatever)]
放在我的 crate 顶部也是行不通的。
好处是生成的文件都有一个可预测的名称,所以我希望有一种方法可以告诉 cargo/rustc 不要对与特定文件名匹配的文件发出警告。这可能吗?
不,您不能使用文件名模式应用 lints。
相反,您可以...
不要在文件中使用!#[allow(...)]
,而是在mod
声明中使用#[allow(...)]
:
#[allow(dead_code)]
mod autogen;
修改生成步骤以更改文件。例如,运行宁library-generator foo.input
,而不是运行library-generator foo.input && sed -i '' '1s/^/#![allow(whatever)]/' myfile.rs
。您也可以在纯 Rust 中执行此操作。由于“生成的文件都有一个可预测的名称”,您也可以通过这种方式找到所有文件并执行此转换。现在每次重新生成文件时都会应用转换。
修改生成器本身以添加一个选项来限制输出的函数或添加 allow
设置。如果您遇到此问题,其他人也可能遇到此问题。不妨为大家修复一下。
在某些情况下,您可以创建一个“垫片”模块来完成您需要做的任何事情,然后 include!
真正的代码。不过这有点讨厌:
#![allow(...)]
include!("autogen_real.rs");
我正在使用一个为我生成一堆代码的库,它通常非常渴望生成我尚未使用的方法。这会导致在构建我的项目时出现一堆嘈杂的警告。
该脚本在我的代码库中生成普通的旧 .rs 文件,然后我将其导入并调用,就像普通代码一样:
mod autogen_code;
pub use self::autogen_code::*;
我不能在生成的代码上使用 #![allow(unused_whatever)]
,因为当我重建我的项目时,生成脚本会再次运行,任何更改都会消失。这些文件是 .gitignore
',并且在顶部有大注释说 "This is all auto-generated. Do not touch."
我不想让未使用的东西出现在我的整个项目中,因此将 #![allow(unused_whatever)]
放在我的 crate 顶部也是行不通的。
好处是生成的文件都有一个可预测的名称,所以我希望有一种方法可以告诉 cargo/rustc 不要对与特定文件名匹配的文件发出警告。这可能吗?
不,您不能使用文件名模式应用 lints。
相反,您可以...
不要在文件中使用
!#[allow(...)]
,而是在mod
声明中使用#[allow(...)]
:#[allow(dead_code)] mod autogen;
修改生成步骤以更改文件。例如,运行宁
library-generator foo.input
,而不是运行library-generator foo.input && sed -i '' '1s/^/#![allow(whatever)]/' myfile.rs
。您也可以在纯 Rust 中执行此操作。由于“生成的文件都有一个可预测的名称”,您也可以通过这种方式找到所有文件并执行此转换。现在每次重新生成文件时都会应用转换。修改生成器本身以添加一个选项来限制输出的函数或添加
allow
设置。如果您遇到此问题,其他人也可能遇到此问题。不妨为大家修复一下。在某些情况下,您可以创建一个“垫片”模块来完成您需要做的任何事情,然后
include!
真正的代码。不过这有点讨厌:#![allow(...)] include!("autogen_real.rs");