From 9e125ce46f987bc545aa36213dc7b396474ab176 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 19 Oct 2024 20:47:18 -0700 Subject: [PATCH] Reorder precise captured params to print lifetimes before idents --- src/generics.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/generics.rs b/src/generics.rs index bbc32d3ed4..ef1c52f0ea 100644 --- a/src/generics.rs +++ b/src/generics.rs @@ -1338,7 +1338,26 @@ pub(crate) mod printing { fn to_tokens(&self, tokens: &mut TokenStream) { self.use_token.to_tokens(tokens); self.lt_token.to_tokens(tokens); - self.params.to_tokens(tokens); + + // Print lifetimes before types and consts, regardless of their + // order in self.params. + let mut trailing_or_empty = true; + for param in self.params.pairs() { + if let CapturedParam::Lifetime(_) = **param.value() { + param.to_tokens(tokens); + trailing_or_empty = param.punct().is_some(); + } + } + for param in self.params.pairs() { + if let CapturedParam::Ident(_) = **param.value() { + if !trailing_or_empty { + ::default().to_tokens(tokens); + trailing_or_empty = true; + } + param.to_tokens(tokens); + } + } + self.gt_token.to_tokens(tokens); } }