diff --git a/README.md b/README.md index 7a507a89..73509caf 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ using matched rule and run it. Rules enabled by default: * `cd_parent` – changes `cd..` to `cd ..`; * `cd_mkdir` – creates directories before cd'ing into them; * `cp_omitting_directory` – adds `-a` when you `cp` directory; +* `dry` – fix repetitions like "git git push"; * `fix_alt_space` – replaces Alt+Space with Space character; * `git_add` – fix *"Did you forget to 'git add'?"*; * `git_checkout` – creates the branch before checking-out; diff --git a/tests/rules/test_dry.py b/tests/rules/test_dry.py new file mode 100644 index 00000000..757866df --- /dev/null +++ b/tests/rules/test_dry.py @@ -0,0 +1,17 @@ +import pytest +from thefuck.rules.dry import match, get_new_command +from tests.utils import Command + + +@pytest.mark.parametrize('command', [ + Command(script='cd cd foo'), + Command(script='git git push origin/master')]) +def test_match(command): + assert match(command, None) + + +@pytest.mark.parametrize('command, new_command', [ + (Command('cd cd foo'), 'cd foo'), + (Command('git git push origin/master'), 'git push origin/master')]) +def test_get_new_command(command, new_command): + assert get_new_command(command, None) == new_command diff --git a/thefuck/rules/dry.py b/thefuck/rules/dry.py new file mode 100644 index 00000000..f0954ea6 --- /dev/null +++ b/thefuck/rules/dry.py @@ -0,0 +1,12 @@ +def match(command, settings): + split_command = command.script.split() + + return len(split_command) >= 2 and split_command[0] == split_command[1] + + +def get_new_command(command, settings): + return command.script[command.script.find(' ')+1:] + +# it should be rare enough to actually have to type twice the same word, so +# this rule can have a higher priority to come before things like "cd cd foo" +priority = 900