diff options
Diffstat (limited to 'macro/src/generics.rs')
-rw-r--r-- | macro/src/generics.rs | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/macro/src/generics.rs b/macro/src/generics.rs index 3de0330b..7862536d 100644 --- a/macro/src/generics.rs +++ b/macro/src/generics.rs @@ -1,9 +1,9 @@ use crate::syntax::instantiate::NamedImplKey; use crate::syntax::resolve::Resolution; -use crate::syntax::Impl; +use crate::syntax::{Impl, Lifetimes}; use proc_macro2::TokenStream; use quote::ToTokens; -use syn::Token; +use syn::{Lifetime, Token}; pub struct ImplGenerics<'a> { explicit_impl: Option<&'a Impl>, @@ -61,3 +61,31 @@ impl<'a> ToTokens for TyGenerics<'a> { } } } + +pub struct UnderscoreLifetimes<'a> { + generics: &'a Lifetimes, +} + +impl Lifetimes { + pub fn to_underscore_lifetimes(&self) -> UnderscoreLifetimes { + UnderscoreLifetimes { generics: self } + } +} + +impl<'a> ToTokens for UnderscoreLifetimes<'a> { + fn to_tokens(&self, tokens: &mut TokenStream) { + let Lifetimes { + lt_token, + lifetimes, + gt_token, + } = self.generics; + lt_token.to_tokens(tokens); + for pair in lifetimes.pairs() { + let (lifetime, punct) = pair.into_tuple(); + let lifetime = Lifetime::new("'_", lifetime.span()); + lifetime.to_tokens(tokens); + punct.to_tokens(tokens); + } + gt_token.to_tokens(tokens); + } +} |