我使用的库为我生成了大量代码,而且它常常非常渴望生成我还没有使用过的方法。在构建我的项目时,这会导致一堆嘈杂的警告。
该脚本在我的代码库中生成普通的.rs文件,然后我导入并调用它,就像普通代码一样:
mod autogen_code;
pub use self::autogen_code::*;
我无法在生成的代码上使用#![allow(unused_whatever)]
,因为当我重建项目时,生成脚本会再次运行,任何更改都将消失。这些文件为.gitignore
,并且在顶部有大量评论"这是全部自动生成的。不要碰。"
我不想在我的整个项目中允许使用未使用的内容,因此将#![allow(unused_whatever)]
放在我的包装箱顶部也是一个非首发。
好处是生成的文件都有一个可预测的名称,所以我希望有一种方法可以告诉cargo / rustc不要为匹配特定文件名的文件发出警告。这可能吗?
答案 0 :(得分:9)
不,您不能使用文件名模式应用lints。
相反,你可以......
而不是在1> 文件中使用!#[allow(...)]
,而是在#[allow(...)]
声明中使用mod
:
#[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");