in focus/internals/src/lib/model/selection/project.rs [213:266]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let sorted_projects = {
let mut projects: Vec<_> = self.underlying.values().into_iter().collect();
projects.sort_unstable_by_key(|project| project.name.as_str());
projects
};
let longest_project_name = sorted_projects
.iter()
.fold(0_usize, |highest, &project| project.name.len().max(highest));
for project in sorted_projects {
let mut padded_project_name = String::from(&project.name);
padded_project_name.extend(
" ".chars()
.cycle()
.take(longest_project_name - project.name.len()),
);
let mut stats = vec![];
if !project.targets.is_empty() {
stats.push(format!(
"{} {}",
project.targets.len(),
if project.targets.len() == 1 {
"target"
} else {
"targets"
}
))
}
if !project.projects.is_empty() {
stats.push(format!(
"{} {}",
project.projects.len(),
if project.projects.len() == 1 {
"project"
} else {
"projects"
}
))
}
let stats = stats.join(", ");
writeln!(
f,
"{} {}{}",
padded_project_name,
project.description,
if stats.is_empty() {
"".to_string()
} else {
format!(" ({})", stats)
}
)?;
}
Ok(())
}