来自Syn 文档:
Syn 对
proc-macro2
crates.io 的 crate 提供的令牌表示进行操作,而不是直接使用编译器内置的proc-macro
crate。这使得代码可以Syn
在过程宏的上下文之外执行,例如在单元测试或build.rs
我正在尝试为某些 Syn 功能启用单元测试,但是无论我尝试了什么,我都无法让它工作。它不适用于proc_macro2::TokenStream
类型,但它不适用于 the,proc_macro::TokenStream
因为我们不在 proc-macro 上下文中。
use quote::quote;
use syn;
fn test() {
// let stream: syn::export::TokenStream = quote!{fn foo() {};}.into(); // doesn't work
let stream: proc_macro2::TokenStream = quote!{fn foo() {};}.into(); // doesn't work
// let item = parse_macro_input!(stream as Item); // doesn't work
let item = syn::parse(stream).unwrap();
}
fn main() {
test();
}
任何有关如何在 proc-macro 上下文之外测试 syn 函数的帮助将不胜感激。我知道trybuild crate,但我希望能够先对宏的功能进行单元测试。