From af2bfe7c582c588db7f2a148d46e1cf588938165 Mon Sep 17 00:00:00 2001 From: Namwoo Kim Date: Thu, 23 Apr 2015 15:25:12 +0900 Subject: [PATCH] Add a support for pip unknown commands --- tests/rules/test_pip_unknown_command.py | 24 ++++++++++++++++++++++++ thefuck/rules/pip_unknown_command.py | 15 +++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/rules/test_pip_unknown_command.py create mode 100644 thefuck/rules/pip_unknown_command.py diff --git a/tests/rules/test_pip_unknown_command.py b/tests/rules/test_pip_unknown_command.py new file mode 100644 index 00000000..61b5c997 --- /dev/null +++ b/tests/rules/test_pip_unknown_command.py @@ -0,0 +1,24 @@ +import pytest +from thefuck.types import Command +from thefuck.rules.pip_unknown_command import match, get_new_command + + +@pytest.fixture +def pip_unknown_cmd(): + return '''ERROR: unknown command "instatl" - maybe you meant "install"''' + + +@pytest.fixture +def pip_unknown_cmd_without_recommend(): + return '''ERROR: unknown command "i"''' + + +def test_match(pip_unknown_cmd, pip_unknown_cmd_without_recommend): + assert match(Command('pip instatl', '', pip_unknown_cmd), None) + assert not match(Command('pip i', '', pip_unknown_cmd_without_recommend), + None) + + +def test_get_new_command(pip_unknown_cmd): + assert get_new_command(Command('pip instatl', '', pip_unknown_cmd), None)\ + == 'pip install' diff --git a/thefuck/rules/pip_unknown_command.py b/thefuck/rules/pip_unknown_command.py new file mode 100644 index 00000000..162258e2 --- /dev/null +++ b/thefuck/rules/pip_unknown_command.py @@ -0,0 +1,15 @@ +import re + + +def match(command, settings): + return ('pip' in command.script and + 'unknown command' in command.stderr and + 'maybe you meant' in command.stderr) + + +def get_new_command(command, settings): + broken_cmd = re.findall(r'ERROR: unknown command \"([a-z]+)\"', + command.stderr)[0] + new_cmd = re.findall(r'maybe you meant \"([a-z]+)\"', command.stderr)[0] + + return command.script.replace(broken_cmd, new_cmd, 1)