2019-06-07 13:56:04 +00:00
|
|
|
use failure::Fallible;
|
2019-06-11 11:43:01 +00:00
|
|
|
|
2019-06-07 13:56:04 +00:00
|
|
|
use rga::adapters::spawning::map_exe_error;
|
2019-06-05 19:28:35 +00:00
|
|
|
use rga::adapters::*;
|
2019-06-07 19:46:03 +00:00
|
|
|
use rga::args::*;
|
2019-06-07 19:46:17 +00:00
|
|
|
|
2019-06-07 19:46:03 +00:00
|
|
|
|
2019-06-11 11:43:01 +00:00
|
|
|
use std::process::Command;
|
2019-06-04 18:08:26 +00:00
|
|
|
|
2019-06-07 19:46:03 +00:00
|
|
|
|
|
|
|
fn main() -> Fallible<()> {
|
|
|
|
env_logger::init();
|
2019-06-06 10:31:18 +00:00
|
|
|
|
2019-06-07 19:46:03 +00:00
|
|
|
let (args, passthrough_args) = split_args()?;
|
2019-06-11 11:34:04 +00:00
|
|
|
let adapters = get_adapters_filtered(&args.adapters)?;
|
2019-06-05 19:28:35 +00:00
|
|
|
|
2019-06-11 11:34:04 +00:00
|
|
|
if args.list_adapters {
|
2019-06-07 22:04:48 +00:00
|
|
|
println!("Adapters:\n");
|
2019-06-06 10:31:18 +00:00
|
|
|
for adapter in adapters {
|
|
|
|
let meta = adapter.metadata();
|
2019-06-06 12:55:27 +00:00
|
|
|
let matchers = meta
|
2019-06-11 11:34:04 +00:00
|
|
|
.fast_matchers
|
2019-06-06 12:55:27 +00:00
|
|
|
.iter()
|
|
|
|
.map(|m| match m {
|
2019-06-11 11:34:04 +00:00
|
|
|
FastMatcher::FileExtension(ext) => format!(".{}", ext),
|
2019-06-06 12:55:27 +00:00
|
|
|
})
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
.join(", ");
|
2019-06-07 22:04:48 +00:00
|
|
|
print!(
|
|
|
|
" - {}\n {}\n Extensions: {}\n",
|
|
|
|
meta.name, meta.description, matchers
|
|
|
|
);
|
2019-06-06 12:55:27 +00:00
|
|
|
println!("");
|
2019-06-06 10:31:18 +00:00
|
|
|
}
|
|
|
|
return Ok(());
|
|
|
|
}
|
|
|
|
|
2019-06-05 19:28:35 +00:00
|
|
|
let extensions = adapters
|
|
|
|
.iter()
|
2019-06-11 11:34:04 +00:00
|
|
|
.flat_map(|a| &a.metadata().fast_matchers)
|
2019-06-05 19:28:35 +00:00
|
|
|
.filter_map(|m| match m {
|
2019-06-11 11:34:04 +00:00
|
|
|
FastMatcher::FileExtension(ext) => Some(ext as &str),
|
2019-06-05 19:28:35 +00:00
|
|
|
})
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
.join(",");
|
|
|
|
|
2019-06-04 18:08:26 +00:00
|
|
|
let exe = std::env::current_exe().expect("Could not get executable location");
|
|
|
|
let preproc_exe = exe.with_file_name("rga-preproc");
|
|
|
|
let mut child = Command::new("rg")
|
2019-06-05 19:28:35 +00:00
|
|
|
.arg("--no-line-number")
|
2019-06-04 18:08:26 +00:00
|
|
|
.arg("--pre")
|
|
|
|
.arg(preproc_exe)
|
2019-06-05 19:28:35 +00:00
|
|
|
.arg("--pre-glob")
|
|
|
|
.arg(format!("*.{{{}}}", extensions))
|
2019-06-06 10:31:18 +00:00
|
|
|
.args(passthrough_args)
|
2019-06-07 13:56:04 +00:00
|
|
|
.spawn()
|
|
|
|
.map_err(|e| map_exe_error(e, "rg", "Please make sure you have ripgrep installed."))?;
|
2019-06-04 18:08:26 +00:00
|
|
|
|
|
|
|
child.wait()?;
|
|
|
|
Ok(())
|
|
|
|
}
|