在Cargo项目中,我可以使用此命令轻松地在src
代码上运行clippy:
rustup run nightly cargo clippy
但是,如果我使用的是build script,我也希望能够使用build dependencies。例如,如果我的build.rs
文件如下所示:
fn main() {
let foo = "Hello, world!";
println!("{}", foo);
}
当我运行clippy时,我想看到这个:
warning: use of a blacklisted/placeholder name `foo`, #[warn(blacklisted_name)] on by default
--> build.rs:2:9
|
2 | let foo = "Hello, world!";
| ^^^
|
= help: for further information visit https://github.com/Manishearth/rust-clippy/wiki#blacklisted_name
我能想到在我的构建脚本上运行clippy的唯一方法是将其复制到cargo new
临时项目中,运行clippy,在那里进行更改,然后复制回来,但这非常不方便且很快当{{3}}等添加到混合物中时变得不可行。
使用clippy分析我的构建脚本是否有更简单的方法?
答案 0 :(得分:4)
有两种方法可以使用Clippy:cargo clippy
命令和clippy
编译器插件。 cargo clippy
将构建脚本检测为主项目的依赖项,因此它不会加载编译器插件。
因此,另一个选择是直接使用编译器插件。执行此操作的说明位于clippy's README。但是,我们需要对构建脚本中的它进行一些调整。
首先,我们需要添加clippy
作为构建依赖项:
[build-dependencies]
clippy = { version = "*", optional = true }
[features]
default = []
将其添加到[dependencies]
将不起作用(结果为error[E0463]: can't find crate for `clippy`
),因为Cargo在构建构建脚本时不会将依赖关系的路径传递给编译器。
然后,我们需要在build.rs
的顶部添加:
#![cfg_attr(feature="clippy", feature(plugin))]
#![cfg_attr(feature="clippy", plugin(clippy))]
最后,我们需要在启用clippy
功能的情况下进行构建:
$ cargo build --features clippy
如果要在使用上述命令时在构建脚本和主项目上运行clippy
,请将相同的clippy
依赖项添加到[dependencies]
,然后添加{ {1}} crate根(cfg_attr
,lib.rs
等)的属性。