#![doc(html_root_url = "https://docs.rs/respan/0.1.6")]
#![allow(clippy::needless_doctest_main)]
use proc_macro::{Group, Span, TokenStream, TokenTree};
#[proc_macro]
pub fn call_site(input: TokenStream) -> TokenStream {
respan(input, Span::call_site())
}
#[proc_macro]
pub fn mixed_site(input: TokenStream) -> TokenStream {
respan(input, Span::mixed_site())
}
fn respan(input: TokenStream, site: Span) -> TokenStream {
input
.into_iter()
.map(|mut token| {
let original_span = token.span();
if let TokenTree::Group(group) = &mut token {
let delimiter = group.delimiter();
let stream = respan(group.stream(), site);
*group = Group::new(delimiter, stream);
}
token.set_span(original_span.resolved_at(site));
token
})
.collect()
}