From 73ad099b34292bab5e5cb476cb67b8958a16e1bb Mon Sep 17 00:00:00 2001 From: iff Date: Mon, 7 Aug 2023 16:25:43 +0200 Subject: [PATCH] fix: check if the commands are similar when checking difference --- src/main.rs | 6 ++++-- src/style.rs | 10 ++++++++-- src/suggestions.rs | 8 ++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index ef0e97c..a1c78f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ use colored::Colorize; +use crate::style::highlight_difference; mod args; mod files; @@ -16,8 +17,9 @@ fn main() { let corrected_command = suggestions::suggest_command(&shell, &last_command); if let Some(corrected_command) = corrected_command { - if corrected_command != last_command { - suggestions::confirm_suggestion(&shell, &corrected_command, &last_command); + let command_difference = highlight_difference(&shell, &corrected_command, &last_command); + if let Some(command) = command_difference { + suggestions::confirm_suggestion(&shell, &command); return; } } diff --git a/src/style.rs b/src/style.rs index c0ef7b7..9e16e55 100644 --- a/src/style.rs +++ b/src/style.rs @@ -4,9 +4,15 @@ use colored::*; // to_string() is necessary here, otherwise there won't be color in the output #[warn(clippy::unnecessary_to_owned)] -pub fn highlight_difference(shell: &str, suggested_command: &str, last_command: &str) -> String { +pub fn highlight_difference(shell: &str, suggested_command: &str, last_command: &str) -> Option { let mut split_suggested_command = split_command(suggested_command); let split_last_command = split_command(last_command); + println!("split_suggested_command: {:?}", split_suggested_command); + println!("split_last_command: {:?}", split_last_command); + + if split_suggested_command == split_last_command { + return None; + } let privileged = PRIVILEGE_LIST.contains(&split_suggested_command[0].as_str()); @@ -50,5 +56,5 @@ pub fn highlight_difference(shell: &str, suggested_command: &str, last_command: highlighted = split_suggested_command.join(" "); } - highlighted + Some(highlighted) } diff --git a/src/suggestions.rs b/src/suggestions.rs index 37821ef..cf5830c 100644 --- a/src/suggestions.rs +++ b/src/suggestions.rs @@ -4,7 +4,6 @@ use rule_parser::parse_rules; use crate::files::{get_directory_files, get_path_files}; use crate::shell::{command_output, PRIVILEGE_LIST}; -use crate::style::highlight_difference; pub fn suggest_command(shell: &str, last_command: &str) -> Option { let err = command_output(shell, last_command); @@ -54,6 +53,7 @@ fn opt_regex(regex: &str, command: &mut String) -> String { for opt in opts.clone() { *command = command.replace(&opt, ""); } + opts.join(" ") } @@ -119,7 +119,7 @@ fn suggest_typo(typo: &str, candidates: Vec) -> String { suggestion } -fn find_similar(typo: &str, candidates: Vec) -> Option { +pub fn find_similar(typo: &str, candidates: Vec) -> Option { let mut min_distance = 10; let mut min_distance_index = None; for (i, candidate) in candidates.iter().enumerate() { @@ -158,8 +158,8 @@ fn compare_string(a: &str, b: &str) -> usize { matrix[a.chars().count()][b.chars().count()] } -pub fn confirm_suggestion(shell: &str, command: &str, last_command: &str) { - println!("{}\n", highlight_difference(shell, command, last_command)); +pub fn confirm_suggestion(shell: &str, command: &str) { + println!{"{}\n", command} println!("Press enter to execute the suggestion. Or press Ctrl+C to exit."); std::io::stdin().read_line(&mut String::new()).unwrap();