aboutsummaryrefslogtreecommitdiff
path: root/macro/src/generics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'macro/src/generics.rs')
-rw-r--r--macro/src/generics.rs32
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);
+ }
+}