locmess 1.0.0

look at the mess that are your LOC
Documentation
#[macro_use] extern crate log;
#[macro_use] extern crate cli_log;

use {
    locmess::*,
    std::{
        env,
        path::PathBuf,
    },
};

fn main() -> anyhow::Result<()> {
    init_cli_log!();
    let args: Args = argh::from_env();
    debug!("args: {:#?}", &args);
    if args.version {
        println!("locmess {}", env!("CARGO_PKG_VERSION"));
        return Ok(());
    }
    let printer = Printer::new(&args);
    let mut root = args.file
        .as_ref()
        .map_or(env::current_dir()?, PathBuf::from);
    if root.is_relative() {
        root = env::current_dir()?.join(root);
    }
    root = root.canonicalize()?;
    let file_finder = FileFinder::new(root);
    let mut files = if let Some(ext) = args.file_type {
        file_finder.source_files(Some(&ext))
    } else {
        file_finder.main_type_files()
    }?;
    let mut total_histo = Histogram::default();
    let mut paths_over = Vec::new();
    for path in files.drain(..) {
        let mut histo = Histogram::default();
        match read(&path, &mut histo) {
            Ok(max_len) => {
                if let Some(over) = args.over {
                    if max_len > over {
                        paths_over.push(path)
                    }
                }
                total_histo += histo;
            }
            Err(e) => {
                eprintln!("Ignoring {:?} : {}", &path, e);
            }
        }
    }
    total_histo.print(&printer);
    if let Some(over) = args.over {
        if paths_over.is_empty() {
            println!("No file with a line over {} chars", over);
        } else {
            if paths_over.len() == 1 {
                println!("1 file with at least one line over {} chars:", over);
            } else {
                println!("{} files with at least one line over {} chars:", paths_over.len(), over);
            }
            for path in paths_over {
                println!("{}", path.to_string_lossy());
            }
        }
    }
    info!("bye");
    Ok(())
}