mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-07 05:31:18 +00:00
Merge pull request #107 from kimtree/support-pip
Add a support for pip unknown commands
This commit is contained in:
commit
f5e9124327
13
README.md
13
README.md
@ -131,12 +131,12 @@ end
|
|||||||
Or in your Powershell `$PROFILE` on Windows:
|
Or in your Powershell `$PROFILE` on Windows:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
function fuck {
|
function fuck {
|
||||||
$fuck = $(thefuck (get-history -count 1).commandline)
|
$fuck = $(thefuck (get-history -count 1).commandline)
|
||||||
if($fuck.startswith("echo")) {
|
if($fuck.startswith("echo")) {
|
||||||
$fuck.substring(5)
|
$fuck.substring(5)
|
||||||
}
|
}
|
||||||
else { iex "$fuck" }
|
else { iex "$fuck" }
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -162,6 +162,7 @@ using matched rule and run it. Rules enabled by default:
|
|||||||
* `lein_not_task` – fixes wrong `lein` tasks like `lein rpl`;
|
* `lein_not_task` – fixes wrong `lein` tasks like `lein rpl`;
|
||||||
* `mkdir_p` – adds `-p` when you trying to create directory without parent;
|
* `mkdir_p` – adds `-p` when you trying to create directory without parent;
|
||||||
* `no_command` – fixes wrong console commands, for example `vom/vim`;
|
* `no_command` – fixes wrong console commands, for example `vom/vim`;
|
||||||
|
* `pip_unknown_command` – fixes wrong pip commands, for example `pip instatl/pip install`;
|
||||||
* `python_command` – prepends `python` when you trying to run not executable/without `./` python script;
|
* `python_command` – prepends `python` when you trying to run not executable/without `./` python script;
|
||||||
* `sl_ls` – changes `sl` to `ls`;
|
* `sl_ls` – changes `sl` to `ls`;
|
||||||
* `rm_dir` – adds `-rf` when you trying to remove directory;
|
* `rm_dir` – adds `-rf` when you trying to remove directory;
|
||||||
@ -204,7 +205,7 @@ def get_new_command(command, settings):
|
|||||||
The Fuck has a few settings parameters, they can be changed in `~/.thefuck/settings.py`:
|
The Fuck has a few settings parameters, they can be changed in `~/.thefuck/settings.py`:
|
||||||
|
|
||||||
* `rules` – list of enabled rules, by default `thefuck.conf.DEFAULT_RULES`;
|
* `rules` – list of enabled rules, by default `thefuck.conf.DEFAULT_RULES`;
|
||||||
* `require_confirmation` – require confirmation before running new command, by default `False`;
|
* `require_confirmation` – require confirmation before running new command, by default `False`;
|
||||||
* `wait_command` – max amount of time in seconds for getting previous command output;
|
* `wait_command` – max amount of time in seconds for getting previous command output;
|
||||||
* `no_colors` – disable colored output.
|
* `no_colors` – disable colored output.
|
||||||
|
|
||||||
|
24
tests/rules/test_pip_unknown_command.py
Normal file
24
tests/rules/test_pip_unknown_command.py
Normal file
@ -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'
|
15
thefuck/rules/pip_unknown_command.py
Normal file
15
thefuck/rules/pip_unknown_command.py
Normal file
@ -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)
|
Loading…
x
Reference in New Issue
Block a user