Fix handling of Self keyword in type definition

This commit is contained in:
Taiki Endo
2020-10-24 05:45:12 +09:00
parent f6e7366b46
commit c67017d466
8 changed files with 315 additions and 6 deletions
+22
View File
@@ -0,0 +1,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()
}