【发布时间】:2020-12-12 19:52:06
【问题描述】:
Syn 对 crates.io 的
proc-macro2crate 提供的令牌表示进行操作,而不是直接使用编译器内置的proc-macrocrate。这使得使用Syn的代码可以在过程宏的上下文之外执行,例如在单元测试或build.rs
我正在尝试为某些 Syn 功能启用单元测试,但是无论我尝试了什么,我都无法让它工作。它不适用于proc_macro2::TokenStream 类型,但它不适用于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,但我希望能够先对宏的功能进行单元测试。
【问题讨论】:
标签: unit-testing parsing rust rust-macros rust-proc-macros