From 599843744b33bd4d24559ce4286e143d2b016c15 Mon Sep 17 00:00:00 2001 From: Aatif Syed Date: Tue, 11 Mar 2025 21:49:26 +0100 Subject: [PATCH 1/2] refactor: push_lifetime* goes through an array instead of a manual iterator --- src/runtime.rs | 66 ++++++-------------------------------------------- 1 file changed, 8 insertions(+), 58 deletions(-) diff --git a/src/runtime.rs b/src/runtime.rs index 4923ccb..84d5ab9 100644 --- a/src/runtime.rs +++ b/src/runtime.rs @@ -305,68 +305,18 @@ pub fn push_ident_spanned(tokens: &mut TokenStream, span: Span, s: &str) { #[doc(hidden)] pub fn push_lifetime(tokens: &mut TokenStream, lifetime: &str) { - struct Lifetime<'a> { - name: &'a str, - state: u8, - } - - impl<'a> Iterator for Lifetime<'a> { - type Item = TokenTree; - - fn next(&mut self) -> Option { - match self.state { - 0 => { - self.state = 1; - Some(TokenTree::Punct(Punct::new('\'', Spacing::Joint))) - } - 1 => { - self.state = 2; - Some(TokenTree::Ident(Ident::new(self.name, Span::call_site()))) - } - _ => None, - } - } - } - - tokens.extend(Lifetime { - name: &lifetime[1..], - state: 0, - }); + tokens.extend([ + TokenTree::Punct(Punct::new('\'', Spacing::Joint)), + TokenTree::Ident(Ident::new(&lifetime[1..], Span::call_site())), + ]); } #[doc(hidden)] pub fn push_lifetime_spanned(tokens: &mut TokenStream, span: Span, lifetime: &str) { - struct Lifetime<'a> { - name: &'a str, - span: Span, - state: u8, - } - - impl<'a> Iterator for Lifetime<'a> { - type Item = TokenTree; - - fn next(&mut self) -> Option { - match self.state { - 0 => { - self.state = 1; - let mut apostrophe = Punct::new('\'', Spacing::Joint); - apostrophe.set_span(self.span); - Some(TokenTree::Punct(apostrophe)) - } - 1 => { - self.state = 2; - Some(TokenTree::Ident(Ident::new(self.name, self.span))) - } - _ => None, - } - } - } - - tokens.extend(Lifetime { - name: &lifetime[1..], - span, - state: 0, - }); + tokens.extend([ + TokenTree::Punct(Punct::new('\'', Spacing::Joint)), + TokenTree::Ident(Ident::new(&lifetime[1..], span)), + ]); } macro_rules! push_punct { From 7a143c7992b854020a3d933610db34c082a915cb Mon Sep 17 00:00:00 2001 From: Aatif Syed Date: Wed, 12 Mar 2025 00:30:11 +0100 Subject: [PATCH 2/2] fix: set span on tick --- src/runtime.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/runtime.rs b/src/runtime.rs index 84d5ab9..af5b9e4 100644 --- a/src/runtime.rs +++ b/src/runtime.rs @@ -314,7 +314,11 @@ pub fn push_lifetime(tokens: &mut TokenStream, lifetime: &str) { #[doc(hidden)] pub fn push_lifetime_spanned(tokens: &mut TokenStream, span: Span, lifetime: &str) { tokens.extend([ - TokenTree::Punct(Punct::new('\'', Spacing::Joint)), + TokenTree::Punct({ + let mut tick = Punct::new('\'', Spacing::Joint); + tick.set_span(span); + tick + }), TokenTree::Ident(Ident::new(&lifetime[1..], span)), ]); }