Skip to content

Commit

Permalink
Add rule
Browse files Browse the repository at this point in the history
  • Loading branch information
luizvbo committed Apr 29, 2024
1 parent 3aaf834 commit 1a0c23c
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 34 deletions.
9 changes: 6 additions & 3 deletions src/rules/git_add.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
use crate::{
cli::command::CrabCommand, rules::utils::git::match_rule_with_git_support, shell::Shell,
cli::command::CrabCommand,
rules::{
utils::git::{get_new_command_with_git_support, match_rule_with_git_support},
Rule,
},
shell::Shell,
};
use regex::Regex;
use std::path::Path;

use super::{utils::git::get_new_command_with_git_support, Rule};

fn get_missing_file(command: &CrabCommand, path_exists: Option<bool>) -> Option<String> {
if let Some(stdout) = &command.output {
let re = Regex::new(r"error: pathspec '([^']*)' did not match any file\(s\) known to git.")
Expand Down
10 changes: 7 additions & 3 deletions src/rules/git_commit_add.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
use crate::{
cli::command::CrabCommand, rules::utils::git::match_rule_with_git_support, shell::Shell,
cli::command::CrabCommand,
rules::{
utils::git::{get_new_command_with_git_support, match_rule_with_git_support},
Rule,
},
shell::Shell,
};

use super::{utils::git::get_new_command_with_git_support, Rule};

use crate::utils::replace_argument;

fn auxiliary_match_rule(command: &CrabCommand) -> bool {
if let Some(stdout) = &command.output {
stdout.contains("no changes added to commit")
Expand Down
9 changes: 6 additions & 3 deletions src/rules/git_commit_amend.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use super::{utils::git::get_new_command_with_git_support, Rule};

use crate::{
cli::command::CrabCommand, rules::utils::git::match_rule_with_git_support, shell::Shell,
cli::command::CrabCommand,
rules::{
utils::git::{get_new_command_with_git_support, match_rule_with_git_support},
Rule,
},
shell::Shell,
};

fn auxiliary_match_rule(command: &CrabCommand) -> bool {
Expand Down
53 changes: 28 additions & 25 deletions src/rules/git_rm_staged.rs
Original file line number Diff line number Diff line change
@@ -1,43 +1,42 @@
use crate::{
cli::command::CrabCommand,
rules::{match_rule_with_git_support, utils::git::get_new_command_with_git_support},
Rule,
rules::{
utils::git::{get_new_command_with_git_support, match_rule_with_git_support},
Rule,
},
shell::Shell,
};
use shell::Shell;

fn auxiliary_match_rule(command: &CrabCommand) -> bool {
command.script.contains(" rm ")
&& command.output.as_ref().map_or(false, |o| {
o.contains("error: the following file has changes staged in the index")
&& o.contains("use --cached to keep the file, or -f to force removal")
})
if let Some(output) = &command.output {
return command.script.contains(" rm ")
&& output.contains("error: the following file has changes staged in the index")
&& output.contains("use --cached to keep the file, or -f to force removal");
}
return false;

Check failure on line 16 in src/rules/git_rm_staged.rs

View workflow job for this annotation

GitHub Actions / Lint

unneeded `return` statement
}

pub fn match_rule(command: &mut CrabCommand, _system_shell: Option<&dyn Shell>) -> bool {
pub fn match_rule(command: &mut CrabCommand, system_shell: Option<&dyn Shell>) -> bool {
match_rule_with_git_support(auxiliary_match_rule, command)
}

fn auxiliary_get_new_command(
command: &CrabCommand,
_system_shell: Option<&dyn Shell>,
system_shell: Option<&dyn Shell>,
) -> Vec<String> {
let mut command_parts = command.script.split_whitespace().collect::<Vec<&str>>();
if let Some(index) = command_parts.iter().position(|&r| r == "rm") {
let mut command_list = Vec::new();
command_parts.insert(index + 1, "--cached");
command_list.push(command_parts.join(" "));
command_parts[index + 1] = "-f";
let mut command_parts = command.script_parts.clone();
if let Some(index) = command_parts.iter().position(|r| r == "rm") {
command_parts.insert(index + 1, "--cached".to_string());
let mut command_list = vec![command_parts.join(" ")];
command_parts[index + 1] = "-f".to_string();
command_list.push(command_parts.join(" "));
return command_list;
}
vec![]
}

pub fn get_new_command(
command: &mut CrabCommand,
_system_shell: Option<&dyn Shell>,
) -> Vec<String> {
get_new_command_with_git_support(auxiliary_get_new_command, command, _system_shell)
pub fn get_new_command(command: &mut CrabCommand, system_shell: Option<&dyn Shell>) -> Vec<String> {
get_new_command_with_git_support(auxiliary_get_new_command, command, system_shell)
}

pub fn get_rule() -> Rule {
Expand All @@ -59,9 +58,13 @@ mod tests {
use crate::shell::Bash;
use rstest::rstest;

fn output(target: &str) -> String {
format!("error: the following file has changes staged in the index:\n {}\n(use --cached to keep the file, or -f to force removal)", target)
}

#[rstest]
#[case("git rm foo", "error: the following file has changes staged in the index:\n foo\n(use --cached to keep the file, or -f to force removal)", true)]
#[case("git rm foo bar", "error: the following file has changes staged in the index:\n bar\n(use --cached to keep the file, or -f to force removal)", true)]
#[case("git rm foo", &output("foo"), true)]
#[case("git rm foo bar", &output("bar"), true)]
#[case("git rm foo", "", false)]
#[case("git rm foo bar", "", false)]
#[case("git rm", "", false)]
Expand All @@ -71,8 +74,8 @@ mod tests {
}

#[rstest]
#[case("git rm foo", "error: the following file has changes staged in the index:\n foo\n(use --cached to keep the file, or -f to force removal)", vec!["git rm --cached foo", "git rm -f foo"])]
#[case("git rm foo bar", "error: the following file has changes staged in the index:\n bar\n(use --cached to keep the file, or -f to force removal)", vec!["git rm --cached foo bar", "git rm -f foo bar"])]
#[case("git rm foo", &output("foo"), vec!["git rm --cached foo", "git rm -f foo"])]
#[case("git rm foo bar", &output("bar"), vec!["git rm --cached foo bar", "git rm -f foo bar"])]
fn test_get_new_command(
#[case] command: &str,
#[case] stdout: &str,
Expand Down

0 comments on commit 1a0c23c

Please sign in to comment.