From 3ce7918e35badd26897995c386b563c5bdbe50f5 Mon Sep 17 00:00:00 2001 From: iff Date: Sat, 16 Nov 2024 22:30:42 +0100 Subject: [PATCH] fix: runtime opts --- src/replaces.rs | 16 +++++++++++++--- src/runtime_rules.rs | 7 ++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/replaces.rs b/src/replaces.rs index c5350b2..bd2e4aa 100644 --- a/src/replaces.rs +++ b/src/replaces.rs @@ -1,5 +1,9 @@ use crate::suggestions::*; +fn tag(name: &str, x: i32) -> String { + format!("{{{}{}}}", name, x) +} + pub fn eval_placeholder( string: &str, start: &str, @@ -15,15 +19,21 @@ pub fn eval_placeholder( (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::") { let (placeholder, args) = eval_placeholder(suggest, "{{opt::", "}}"); let opt = &suggest[args.to_owned()]; let regex = opt.trim(); + let current_tag = tag(tag_name, replace_tag); - let command = opt_regex(regex, last_command); - suggest.replace_range(placeholder, &command) + opt_list.push((current_tag.clone(), opt_regex(regex, last_command))); + suggest.replace_range(placeholder, ¤t_tag); + + replace_tag += 1; } } diff --git a/src/runtime_rules.rs b/src/runtime_rules.rs index 18e5b09..97e6b1a 100644 --- a/src/runtime_rules.rs +++ b/src/runtime_rules.rs @@ -164,13 +164,18 @@ fn eval_suggest( } 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::err(&mut suggest, error_msg); replaces::command(&mut suggest, split_command); replaces::shell(&mut suggest, shell); replaces::typo(&mut suggest, split_command, shell); + for (tag, value) in opt_list { + suggest = suggest.replace(&tag, &value); + } + Some(suggest) }