33 lines
932 B
Rust
33 lines
932 B
Rust
use proc_macro2::{Delimiter, Group};
|
|
use quote::quote;
|
|
|
|
#[test]
|
|
fn main() {
|
|
// Okay. Rustc allows top-level `static` with no value syntactically, but
|
|
// not semantically. Syn parses as Item::Verbatim.
|
|
let tokens = quote! {
|
|
pub static FOO: usize;
|
|
pub static BAR: usize;
|
|
};
|
|
let file = syn::parse2::<syn::File>(tokens).unwrap();
|
|
println!("{:#?}", file);
|
|
|
|
// Okay.
|
|
let inner = Group::new(
|
|
Delimiter::None,
|
|
quote!(static FOO: usize = 0; pub static BAR: usize = 0),
|
|
);
|
|
let tokens = quote!(pub #inner;);
|
|
let file = syn::parse2::<syn::File>(tokens).unwrap();
|
|
println!("{:#?}", file);
|
|
|
|
// Formerly parser crash.
|
|
let inner = Group::new(
|
|
Delimiter::None,
|
|
quote!(static FOO: usize; pub static BAR: usize),
|
|
);
|
|
let tokens = quote!(pub #inner;);
|
|
let file = syn::parse2::<syn::File>(tokens).unwrap();
|
|
println!("{:#?}", file);
|
|
}
|