index : smol-guess.git

ascending towards madness

use std::{collections::HashMap, env, path::PathBuf};

use itertools::Itertools;
use smolguess::{
    core::{LanguageDefinitions, LanguageMatch},
    repository,
};

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() < 2 || args[1].is_empty() {
        eprintln!("Usage: {} <path_to_bare_repository>", args[0]);
        std::process::exit(1);
    }

    let mut stopwatch = stopwatch::Stopwatch::new();
    stopwatch.start();

    let repo_languages: Vec<LanguageMatch> = LanguageDefinitions::default()
        .load_builtins()
        .identify_files(repository::get_bare_repository_files(PathBuf::from(
            &args[1],
        )));

    let grouped_matches: HashMap<_, _> = repo_languages
        .into_iter()
        .group_by(|matched| matched.language.name.clone())
        .into_iter()
        .map(|(group, items)| (group, items.collect_vec()))
        .collect();

    let mut sorted_groups: Vec<_> = grouped_matches.into_iter().collect();
    sorted_groups.sort_by(|(_, first), (_, second)| second.len().cmp(&first.len()));

    println!("{:#?}", sorted_groups);
    println!();

    sorted_groups
        .iter()
        .for_each(|item| println!("{}: {}", item.0, item.1.len()));

    stopwatch.stop();

    println!("\nOperation complete in {}", stopwatch);
}