1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
mod args;

use crate::args::Args;
use clap::Parser;
use depckeck_rs_core::checker::Checker;
use depckeck_rs_core::config::Config;
use proc_exit::WithCodeResultExt;

pub fn run() {
    human_panic::setup_panic!();
    let result = try_run();
    proc_exit::exit(result);
}

fn try_run() -> proc_exit::ExitResult {
    let args = match Args::try_parse() {
        Ok(args) => args,
        Err(e) if e.use_stderr() => {
            let _ = e.print();
            return proc_exit::Code::USAGE_ERR.ok();
        }
        Err(e) => {
            let _ = e.print();
            return proc_exit::Code::SUCCESS.ok();
        }
    };

    let Args {
        directory,
        ignore_bin_package,
        skip_missing,
        ignore_path,
        ignore_patterns,
        ignore_matches,
        verbose,
    } = args;

    env_logger::Builder::new()
        .filter_level(verbose.log_level_filter())
        .init();

    let mut config = Config::new(directory)
        .with_ignore_bin_package(ignore_bin_package)
        .with_skip_missing(skip_missing)
        .with_ignore_path(ignore_path);

    if let Some(ignore_patterns) = ignore_patterns {
        config = config.with_ignore_patterns(ignore_patterns);
    }

    if let Some(ignore_matches) = ignore_matches {
        config = config.with_ignore_matches(ignore_matches);
    }

    let result = Checker::new(config)
        .check_package()
        .with_code(proc_exit::Code::USAGE_ERR)?;

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

    Ok(())
}