1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use proc_macro2::{Span, TokenStream}; use quote::ToTokens; use syn::parse::Parse; pub(crate) fn respan<T>(node: &T, span: Span) -> T where T: ToTokens + Parse, { let tokens = node.to_token_stream(); let respanned = respan_tokens(tokens, span); syn::parse2(respanned).unwrap() } fn respan_tokens(tokens: TokenStream, span: Span) -> TokenStream { tokens .into_iter() .map(|mut token| { token.set_span(span); token }) .collect() }