diff --git a/README.md b/README.md index b2f169c..77b3064 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ sudo -H pip install thefuck --upgrade The Fuck tries to match a rule for the previous command, creates a new command using the matched rule and runs it. Rules enabled by default are as follows: +* `ag_literal` – adds `-Q` to `ag` when suggested; * `aws_cli` – fixes misspelled commands like `aws dynamdb scan` * `cargo` – runs `cargo build` instead of `cargo`; * `cargo_no_command` – fixes wrongs commands like `cargo buid`; diff --git a/tests/rules/test_ag_literal.py b/tests/rules/test_ag_literal.py new file mode 100644 index 0000000..660786d --- /dev/null +++ b/tests/rules/test_ag_literal.py @@ -0,0 +1,25 @@ +import pytest +from thefuck.rules.ag_literal import match, get_new_command +from tests.utils import Command + +stderr = ('ERR: Bad regex! pcre_compile() failed at position 1: missing )\n' + 'If you meant to search for a literal string, run ag with -Q\n') + +matching_command = Command(script='ag \\(', stderr=stderr) + +@pytest.mark.parametrize('command', [ + matching_command]) +def test_match(command): + assert match(matching_command) + + +@pytest.mark.parametrize('command', [ + Command(script='ag foo', stderr='')]) +def test_not_match(command): + assert not match(command) + + +@pytest.mark.parametrize('command, new_command', [ + (matching_command, 'ag -Q \\(')]) +def test_get_new_command(command, new_command): + assert get_new_command(command) == new_command diff --git a/thefuck/rules/ag_literal.py b/thefuck/rules/ag_literal.py new file mode 100644 index 0000000..4014eed --- /dev/null +++ b/thefuck/rules/ag_literal.py @@ -0,0 +1,11 @@ +from thefuck.utils import for_app +from thefuck.utils import replace_argument + + +@for_app('ag') +def match(command): + return 'run ag with -Q' in command.stderr + + +def get_new_command(command): + return command.script.replace('ag', 'ag -Q', 1)