ripr 0.3.0

Static RIPR mutation-exposure analysis for Rust workspaces
Documentation
mod commands;
mod help;
mod parse;

pub fn run(args: Vec<String>) -> Result<(), String> {
    match args.get(1).map(|s| s.as_str()) {
        None | Some("--help" | "-h") => {
            help::print_help();
            Ok(())
        }
        Some("--version" | "-V") => {
            println!("ripr {}", env!("CARGO_PKG_VERSION"));
            Ok(())
        }
        Some("check") => commands::check(&args[2..]),
        Some("explain") => commands::explain(&args[2..]),
        Some("context") => commands::context(&args[2..]),
        Some("doctor") => commands::doctor(&args[2..]),
        Some("lsp") => commands::lsp(&args[2..]),
        Some(command) => Err(format!("unknown command {command:?}. Run `ripr --help`.")),
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    fn args(values: &[&str]) -> Vec<String> {
        values.iter().map(|value| value.to_string()).collect()
    }

    #[test]
    fn run_rejects_unknown_command() {
        assert_eq!(
            run(args(&["ripr", "unknown"])),
            Err("unknown command \"unknown\". Run `ripr --help`.".to_string())
        );
    }

    #[test]
    fn run_dispatches_check_parse_errors() {
        assert_eq!(
            run(args(&["ripr", "check", "--format", "xml"])),
            Err("unknown format \"xml\"".to_string())
        );
    }

    #[test]
    fn run_dispatches_doctor_root_parse_errors() {
        assert_eq!(
            run(args(&["ripr", "doctor", "--root"])),
            Err("missing value for --root".to_string())
        );
    }
}