我有一个build script,我可以通过a lot of information访问cargo_metadata关于另一个箱子的信息。
现在,我正在寻找在另一个包装箱内查找特定proc-macro
的所有调用的方法。
从理论上讲,我可以自己解析另一个板条箱的来源,但出于众所周知的原因,我宁愿以任何可能的方式避免它:-)
理想情况下,我正在寻找已由编译器使用的板条箱。或至少是使用某种方式使用编译器的输出来收集此类信息的板条箱。
但是任何解决方案都会有所帮助!
从我预期的代码中可以找到理想的解决方案:
use proc_macro::TokenStream;
use some_cool_crate::macros_lookup;
use some_cool_crate::Macros;
let path_to_another_crates_cargo_toml = "/path/to/another_crate/Cargo.toml";
let macros = Macros {
name: "my_macro",
crate: "macro_original_crate",
};
// The thing I'm looking for:
macros_lookup(
path_to_another_crates_cargo_toml,
¯os,
|attr: TokenStream, input: TokenStream,| {
// there I'll do some interesting stuff
},
);
P.S。目前,我是从Cargo.toml
的{{1}}的自定义部分获取信息的,但它要求我保持[package.metadata]
与源保持同步。
P.P.S。我做所有这些“很酷”的事情的原因是broken Re-exporting C symbols for cdylib