From b5f2f139e4e1860958b98383aa6e10d77f3bc08a Mon Sep 17 00:00:00 2001 From: iff Date: Fri, 4 Aug 2023 00:52:49 +0200 Subject: [PATCH] feat: in-line shell evaluation --- rule_parser/src/lib.rs | 2 +- rule_parser/src/replaces.rs | 8 +++++++- rules/git.toml | 11 +++++++++++ src/suggestions.rs | 1 - 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/rule_parser/src/lib.rs b/rule_parser/src/lib.rs index dcdbaea..8dc90b8 100644 --- a/rule_parser/src/lib.rs +++ b/rule_parser/src/lib.rs @@ -60,7 +60,7 @@ fn gen_match_rules(rules: Vec) -> TokenStream { let suggests = x .suggest .iter() - .map(|x| x.to_lowercase()) + .map(|x| x.to_string()) .collect::>(); (pattern, suggests) }) diff --git a/rule_parser/src/replaces.rs b/rule_parser/src/replaces.rs index 6975f2c..7dac84c 100644 --- a/rule_parser/src/replaces.rs +++ b/rule_parser/src/replaces.rs @@ -188,7 +188,13 @@ pub fn shell_tag(suggest: &mut String, replace_list: &mut Vec, cmd if suggest.contains(&command) { *suggest = suggest.replace(&command, &tag(tag_name, replace_tag)); - replace_list.push(rtag(tag_name, replace_tag, command)); + + let split = command.split_once(',').unwrap(); + let argument = split.1.trim_end_matches(')').trim(); + let argument = format!("\"{}\"", argument); + let function = format!("{}, {}).join(\"\")", split.0, argument); + // let function = format!("\"{}, {}\"", split.0, split.1); + replace_list.push(rtag(tag_name, replace_tag, function)); replace_tag += 1; } } diff --git a/rules/git.toml b/rules/git.toml index b48e341..9407579 100644 --- a/rules/git.toml +++ b/rules/git.toml @@ -75,3 +75,14 @@ suggest = [ git checkout {{typo[2]({{shell(git branch)}})}} ''' ] + +[[match_err]] +pattern = [ + "current branch test has no upstream branch" +] +suggest = [ +''' +#[cmd_contains(push)] +git push --set-upstream origin {{shell(git rev-parse --abbrev-ref HEAD)}} +''' +] diff --git a/src/suggestions.rs b/src/suggestions.rs index 7089eae..b7946de 100644 --- a/src/suggestions.rs +++ b/src/suggestions.rs @@ -75,7 +75,6 @@ fn eval_shell_command(shell: &str, command: &str) -> Vec { .expect("failed to execute process"); let output = String::from_utf8_lossy(&output.stdout); let split_output = output.split('\n').collect::>(); - println!("{:?}", split_output); split_output .iter() .map(|s| s.trim().to_string())