From 3ee0a4dfdb00bec96c5c128b1d0fd3c8e4ebd923 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Fri, 8 Nov 2024 13:15:57 -0500 Subject: [PATCH] Emit rebinding only for interpolations that refer to a field --- impl/src/fmt.rs | 13 +++++-------- impl/src/unraw.rs | 9 +++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/impl/src/fmt.rs b/impl/src/fmt.rs index d2ab077..d00ff5b 100644 --- a/impl/src/fmt.rs +++ b/impl/src/fmt.rs @@ -64,10 +64,6 @@ impl Display<'_> { Ok(index) => MemberUnraw::Unnamed(Index { index, span }), Err(_) => return Ok(()), }; - if !member_index.contains_key(&member) { - out += int; - continue; - } member } 'a'..='z' | 'A'..='Z' | '_' => { @@ -109,16 +105,17 @@ impl Display<'_> { Some('E') => Trait::UpperExp, Some(_) => Trait::Display, None => { - if member_index.contains_key(&member) { - has_bonus_display = true; - binding_value.extend(quote_spanned!(span=> .as_display())); - } + has_bonus_display = true; + binding_value.extend(quote_spanned!(span=> .as_display())); Trait::Display } }; infinite_recursive |= member == *"self" && bound == Trait::Display; if let Some(&field) = member_index.get(&member) { implied_bounds.insert((field, bound)); + } else { + out += &member.to_string(); + continue; } let mut formatvar = IdentUnraw::new(match &member { MemberUnraw::Unnamed(index) => format_ident!("__field{}", index), diff --git a/impl/src/unraw.rs b/impl/src/unraw.rs index c459b69..a232621 100644 --- a/impl/src/unraw.rs +++ b/impl/src/unraw.rs @@ -89,6 +89,15 @@ impl MemberUnraw { } } +impl Display for MemberUnraw { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + match self { + MemberUnraw::Named(this) => Display::fmt(this, formatter), + MemberUnraw::Unnamed(this) => Display::fmt(&this.index, formatter), + } + } +} + impl Eq for MemberUnraw {} impl PartialEq for MemberUnraw {