feat: regex for commands

This commit is contained in:
iff 2023-08-07 18:34:52 +02:00
parent b0db0447b9
commit 2f3ba438ea
3 changed files with 46 additions and 17 deletions

View file

@ -193,6 +193,7 @@ fn eval_suggest(suggest: &str) -> TokenStream2 {
let mut cmd_list = Vec::new();
replaces::opts(&mut suggest, &mut replace_list, &mut opt_list);
replaces::cmd_reg(&mut suggest, &mut replace_list);
replaces::err(&mut suggest, &mut replace_list);
replaces::command(&mut suggest, &mut replace_list);
replaces::shell(&mut suggest, &mut cmd_list);

View file

@ -48,6 +48,41 @@ pub fn opts(suggest: &mut String, replace_list: &mut Vec<TokenStream2>, opt_list
}
}
pub fn cmd_reg(suggest: &mut String, replace_list: &mut Vec<TokenStream2>) {
let mut replace_tag = 0;
let tag_name = "cmd";
while suggest.contains("{{cmd::") {
let (placeholder, args) = eval_placeholder(suggest, "{{cmd::", "}}");
let regex = suggest[args.to_owned()].trim();
let command = format!("cmd_regex(r###\"{}\"###, &last_command)", regex);
replace_list.push(rtag(tag_name, replace_tag, command));
suggest.replace_range(placeholder, &tag(tag_name, replace_tag));
replace_tag += 1;
}
}
pub fn err(suggest: &mut String, replace_list: &mut Vec<TokenStream2>) {
let mut replace_tag = 0;
let tag_name = "err";
while suggest.contains("{{err::") {
let (placeholder, args) = eval_placeholder(suggest, "{{err::", "}}");
let regex = suggest[args.to_owned()].trim();
let command = format!("err_regex(r###\"{}\"###, error_msg)", regex);
replace_list.push(rtag(tag_name, replace_tag, command));
suggest.replace_range(placeholder, &tag(tag_name, replace_tag));
replace_tag += 1;
}
}
pub fn command(suggest: &mut String, replace_list: &mut Vec<TokenStream2>) {
let mut replace_tag = 0;
let tag_name = "command";
@ -151,23 +186,6 @@ pub fn typo(suggest: &mut String, replace_list: &mut Vec<TokenStream2>) {
}
pub fn err(suggest: &mut String, replace_list: &mut Vec<TokenStream2>) {
let mut replace_tag = 0;
let tag_name = "err";
while suggest.contains("{{err::") {
let (placeholder, args) = eval_placeholder(suggest, "{{err::", "}}");
let regex = suggest[args.to_owned()].trim();
let command = format!("err_regex(r###\"{}\"###, error_msg)", regex);
replace_list.push(rtag(tag_name, replace_tag, command));
suggest.replace_range(placeholder, &tag(tag_name, replace_tag));
replace_tag += 1;
}
}
pub fn shell(suggest: &mut String, cmd_list: &mut Vec<String>) {
while suggest.contains("{{shell") {
let (placeholder, args) = eval_placeholder(suggest, "{{shell", "}}");

View file

@ -67,6 +67,16 @@ fn err_regex(regex: &str, error_msg: &str) -> String {
err.join(" ")
}
fn cmd_regex(regex: &str, command: &str) -> String {
let regex = Regex::new(regex).unwrap();
let err = regex
.find_iter(command)
.map(|cap| cap.as_str().to_owned())
.collect::<Vec<String>>();
err.join(" ")
}
fn eval_shell_command(shell: &str, command: &str) -> Vec<String> {
let output = std::process::Command::new(shell)
.arg("-c")