Optimize Version display (#13643)

We format enough versions that the `.collect::<Vec<String>>()` showed up
in profiles.
This commit is contained in:
konsti 2025-05-26 15:17:07 +02:00 committed by GitHub
parent 7941d215e5
commit a6f8fa7e42
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 31 deletions

1
.gitignore vendored
View file

@ -31,6 +31,7 @@ flamegraph.svg
perf.data perf.data
perf.data.old perf.data.old
profile.json profile.json
profile.json.gz
# MkDocs # MkDocs
/site /site

View file

@ -762,41 +762,38 @@ impl Serialize for Version {
/// Shows normalized version /// Shows normalized version
impl std::fmt::Display for Version { impl std::fmt::Display for Version {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let epoch = if self.epoch() == 0 { if self.epoch() != 0 {
String::new() write!(f, "{}!", self.epoch())?;
} else { }
format!("{}!", self.epoch()) let release = self.release();
}; let mut release_iter = release.iter();
let release = self if let Some(first) = release_iter.next() {
.release() write!(f, "{first}")?;
.iter() for n in release_iter {
.map(ToString::to_string) write!(f, ".{n}")?;
.collect::<Vec<String>>() }
.join("."); }
let pre = self
.pre() if let Some(Prerelease { kind, number }) = self.pre() {
.as_ref() write!(f, "{kind}{number}")?;
.map(|Prerelease { kind, number }| format!("{kind}{number}")) }
.unwrap_or_default(); if let Some(post) = self.post() {
let post = self write!(f, ".post{post}")?;
.post() }
.map(|post| format!(".post{post}")) if let Some(dev) = self.dev() {
.unwrap_or_default(); write!(f, ".dev{dev}")?;
let dev = self }
.dev() if !self.local().is_empty() {
.map(|dev| format!(".dev{dev}"))
.unwrap_or_default();
let local = if self.local().is_empty() {
String::new()
} else {
match self.local() { match self.local() {
LocalVersionSlice::Segments(_) => { LocalVersionSlice::Segments(_) => {
format!("+{}", self.local()) write!(f, "+{}", self.local())?;
}
LocalVersionSlice::Max => {
write!(f, "+")?;
} }
LocalVersionSlice::Max => "+".to_string(),
} }
}; }
write!(f, "{epoch}{release}{pre}{post}{dev}{local}") Ok(())
} }
} }