//@ force-host //@ no-prefer-dynamic #![crate_type = "proc-macro"] extern crate proc_macro; use proc_macro::*; #[proc_macro] pub fn check(input: TokenStream) -> TokenStream { // Parsed `x2` can refer to `x2` from `input` let parsed1: TokenStream = "let x3 = x2;".parse().unwrap(); // `x3` parsed from one string can refer to `x3` parsed from another string. let parsed2: TokenStream = "let x4 = x3;".parse().unwrap(); // Manually assembled `x4` can refer to parsed `x4`. let manual: Vec = vec![ Ident::new("let", Span::call_site()).into(), Ident::new("x5", Span::call_site()).into(), Punct::new('=', Spacing::Alone).into(), Ident::new("x4", Span::call_site()).into(), Punct::new(';', Spacing::Alone).into(), ]; input.into_iter().chain(parsed1.into_iter()) .chain(parsed2.into_iter()) .chain(manual.into_iter()) .collect() }