fn fmt()

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(())
    }