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