mirror of
https://github.com/nvbn/thefuck.git
synced 2025-11-20 00:36:01 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e981d9b01 | ||
|
|
add499af7f | ||
|
|
9c711734aa | ||
|
|
ff7a433f39 | ||
|
|
6bb7d79ddc | ||
|
|
f6c013d033 | ||
|
|
01cf199866 | ||
|
|
3d41a3fb7c | ||
|
|
f55fa35ebf |
@@ -146,6 +146,8 @@ sudo 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:
|
||||
|
||||
* `cargo` – runs `cargo build` instead of `cargo`;
|
||||
* `cargo_no_command` – fixes wrongs commands like `cargo buid`;
|
||||
* `cd_correction` – spellchecks and correct failed cd commands;
|
||||
* `cd_mkdir` – creates directories before cd'ing into them;
|
||||
* `cd_parent` – changes `cd..` to `cd ..`;
|
||||
|
||||
2
setup.py
2
setup.py
@@ -1,7 +1,7 @@
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
|
||||
VERSION = '1.45'
|
||||
VERSION = '1.46'
|
||||
|
||||
|
||||
setup(name='thefuck',
|
||||
|
||||
21
tests/rules/test_cargo_no_command.py
Normal file
21
tests/rules/test_cargo_no_command.py
Normal file
@@ -0,0 +1,21 @@
|
||||
import pytest
|
||||
from thefuck.rules.cargo_no_command import match, get_new_command
|
||||
from tests.utils import Command
|
||||
|
||||
|
||||
no_such_subcommand = """No such subcommand
|
||||
|
||||
Did you mean `build`?
|
||||
"""
|
||||
|
||||
|
||||
@pytest.mark.parametrize('command', [
|
||||
Command(script='cargo buid', stderr=no_such_subcommand)])
|
||||
def test_match(command):
|
||||
assert match(command, None)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('command, new_command', [
|
||||
(Command('cargo buid', stderr=no_such_subcommand), 'cargo build')])
|
||||
def test_get_new_command(command, new_command):
|
||||
assert get_new_command(command, None) == new_command
|
||||
6
thefuck/rules/cargo.py
Normal file
6
thefuck/rules/cargo.py
Normal file
@@ -0,0 +1,6 @@
|
||||
def match(command, settings):
|
||||
return command.script == 'cargo'
|
||||
|
||||
|
||||
def get_new_command(command, settings):
|
||||
return 'cargo build'
|
||||
14
thefuck/rules/cargo_no_command.py
Normal file
14
thefuck/rules/cargo_no_command.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import re
|
||||
|
||||
|
||||
def match(command, settings):
|
||||
return ('cargo' in command.script
|
||||
and 'No such subcommand' in command.stderr
|
||||
and 'Did you mean' in command.stderr)
|
||||
|
||||
|
||||
def get_new_command(command, settings):
|
||||
broken = command.script.split()[1]
|
||||
fix = re.findall(r'Did you mean `([^`]*)`', command.stderr)[0]
|
||||
|
||||
return command.script.replace(broken, fix, 1)
|
||||
@@ -12,7 +12,8 @@ patterns = ['permission denied',
|
||||
'must be run as root',
|
||||
'must be superuser',
|
||||
'Need to be root',
|
||||
'you must be root to run this program.']
|
||||
'you must be root to run this program.',
|
||||
'only root can do that']
|
||||
|
||||
|
||||
def match(command, settings):
|
||||
|
||||
@@ -49,7 +49,7 @@ class Generic(object):
|
||||
history.write(self._get_history_line(command_script))
|
||||
|
||||
def and_(self, *commands):
|
||||
return ' && '.join(commands)
|
||||
return u' && '.join(commands)
|
||||
|
||||
|
||||
class Bash(Generic):
|
||||
@@ -105,7 +105,7 @@ class Fish(Generic):
|
||||
aliases = self.get_aliases()
|
||||
binary = command_script.split(' ')[0]
|
||||
if binary in aliases:
|
||||
return 'fish -ic "{}"'.format(command_script.replace('"', r'\"'))
|
||||
return u'fish -ic "{}"'.format(command_script.replace('"', r'\"'))
|
||||
else:
|
||||
return command_script
|
||||
|
||||
@@ -120,7 +120,7 @@ class Fish(Generic):
|
||||
return u'- cmd: {}\n when: {}\n'.format(command_script, int(time()))
|
||||
|
||||
def and_(self, *commands):
|
||||
return '; and '.join(commands)
|
||||
return u'; and '.join(commands)
|
||||
|
||||
|
||||
class Zsh(Generic):
|
||||
|
||||
Reference in New Issue
Block a user