fix: runtime opts

This commit is contained in:
iff 2024-11-16 22:30:42 +01:00
parent 4323926c77
commit 3ce7918e35
2 changed files with 19 additions and 4 deletions

View file

@ -1,5 +1,9 @@
use crate::suggestions::*; use crate::suggestions::*;
fn tag(name: &str, x: i32) -> String {
format!("{{{}{}}}", name, x)
}
pub fn eval_placeholder( pub fn eval_placeholder(
string: &str, string: &str,
start: &str, start: &str,
@ -15,15 +19,21 @@ pub fn eval_placeholder(
(placeholder, args) (placeholder, args)
} }
pub fn opts(suggest: &mut String, last_command: &mut String) { pub fn opts(suggest: &mut String, last_command: &mut String, opt_list: &mut Vec<(String, String)>) {
let mut replace_tag = 0;
let tag_name = "opts";
while suggest.contains("{{opt::") { while suggest.contains("{{opt::") {
let (placeholder, args) = eval_placeholder(suggest, "{{opt::", "}}"); let (placeholder, args) = eval_placeholder(suggest, "{{opt::", "}}");
let opt = &suggest[args.to_owned()]; let opt = &suggest[args.to_owned()];
let regex = opt.trim(); let regex = opt.trim();
let current_tag = tag(tag_name, replace_tag);
let command = opt_regex(regex, last_command); opt_list.push((current_tag.clone(), opt_regex(regex, last_command)));
suggest.replace_range(placeholder, &command) suggest.replace_range(placeholder, &current_tag);
replace_tag += 1;
} }
} }

View file

@ -164,13 +164,18 @@ fn eval_suggest(
} }
let mut last_command = last_command.to_owned(); let mut last_command = last_command.to_owned();
let mut opt_list = Vec::new();
replaces::opts(&mut suggest, &mut last_command); replaces::opts(&mut suggest, &mut last_command, &mut opt_list);
replaces::cmd_reg(&mut suggest, &mut last_command); replaces::cmd_reg(&mut suggest, &mut last_command);
replaces::err(&mut suggest, error_msg); replaces::err(&mut suggest, error_msg);
replaces::command(&mut suggest, split_command); replaces::command(&mut suggest, split_command);
replaces::shell(&mut suggest, shell); replaces::shell(&mut suggest, shell);
replaces::typo(&mut suggest, split_command, shell); replaces::typo(&mut suggest, split_command, shell);
for (tag, value) in opt_list {
suggest = suggest.replace(&tag, &value);
}
Some(suggest) Some(suggest)
} }