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);
|
||
|
}
|