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