2017-03-04 25 views
1

Rust提供了各种写插件的方法。为了扩展对Rust代码的检查,它允许开发人员编写Lint Plugins。使用该插件的典型方法是添加一行到源代码,表明使用这个插件:如何在不修改源代码的情况下加载Rust编译器插件?

#![plugin(myplugin)] 

您还需要编辑Cargo.toml文件,包括您的插件项目在dependencies部分:

myplugin = {path = "/path/to/myproject"} 

然而,如果要分析大项目,这些修改似乎是令人不安的是,我不知道是否cargo buildrustc提供任何方式来加载我的插件,而无需修改源代码。

回答

2

rustc有一个用于加载其他插件的命令行参数:-Z extra-plugins=<plugins>。但是,该选项还要求编译插件库的路径传递给编译器。如果插件库在Cargo.toml中被声明为依赖关系,这将自动完成。如果它不在Cargo.toml中,那么除了-Z extra-plugins=<plugins>选项之外,您可以独立编译它并使用--extern my_plugin=/path/to/plugin.rlib手动引用它。

还有另一种选择。 Clippy,Rust的大量棉花提供了一个程序,可以调用cargo clippy。该程序基本上是一个伪造的rustc,它实现了一个编译器前端(使用rustc使用的内部包装箱),将Clippy直接加载到编译器的插件注册表中(仅针对主项目,不针对项目的依赖关系)。 You can see the code on GitHub (licensed under MPLv2).这种方法的优点是你不必为插件提供路径,因为插件是在前端构建的。这使得插件用户使用起来非常方便。缺点是这样的程序依赖于不稳定的编译器内部。这意味着,由于rustc的unstable API发生突变,您的程序可能会随时停止编译。

+0

非常感谢! – Qoros

相关问题