mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-21 20:38:54 +00:00
Added cd_mkdir rule
This fixes #50 and #98. ```bash $ cd foo/bar/baz cd: foo: No such file or directory $ fuck mkdir -p foo/bar/baz && cd foo/bar/baz ``` Added matchers for both Bash and sh error messages. Depending on your default shell, the messages might be slightly different.
This commit is contained in:
parent
d0e02bc20c
commit
d12a8bcdd8
@ -156,6 +156,7 @@ using matched rule and run it. Rules enabled by default:
|
|||||||
|
|
||||||
* `brew_unknown_command` – fixes wrong brew commands, for example `brew docto/brew doctor`;
|
* `brew_unknown_command` – fixes wrong brew commands, for example `brew docto/brew doctor`;
|
||||||
* `cd_parent` – changes `cd..` to `cd ..`;
|
* `cd_parent` – changes `cd..` to `cd ..`;
|
||||||
|
* `cd_mkdir` – creates directories before cd'ing into them;
|
||||||
* `cp_omitting_directory` – adds `-a` when you `cp` directory;
|
* `cp_omitting_directory` – adds `-a` when you `cp` directory;
|
||||||
* `fix_alt_space` – replaces Alt+Space with Space character;
|
* `fix_alt_space` – replaces Alt+Space with Space character;
|
||||||
* `git_no_command` – fixes wrong git commands like `git brnch`;
|
* `git_no_command` – fixes wrong git commands like `git brnch`;
|
||||||
|
19
tests/rules/test_cd_mkdir.py
Normal file
19
tests/rules/test_cd_mkdir.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from mock import Mock
|
||||||
|
from thefuck.rules.cd_mkdir import match, get_new_command
|
||||||
|
|
||||||
|
|
||||||
|
def test_match():
|
||||||
|
assert match(Mock(script='cd foo', stderr='cd: foo: No such file or directory'),
|
||||||
|
None)
|
||||||
|
assert match(Mock(script='cd foo/bar/baz', stderr='cd: foo: No such file or directory'),
|
||||||
|
None)
|
||||||
|
assert match(Mock(script='cd foo/bar/baz', stderr='cd: can\'t cd to foo/bar/baz'),
|
||||||
|
None)
|
||||||
|
assert not match(Mock(script='cd foo',
|
||||||
|
stderr=''), None)
|
||||||
|
assert not match(Mock(script='', stderr=''), None)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_new_command():
|
||||||
|
assert get_new_command(Mock(script='cd foo'), None) == 'mkdir -p foo && cd foo'
|
||||||
|
assert get_new_command(Mock(script='cd foo/bar/baz'), None) == 'mkdir -p foo/bar/baz && cd foo/bar/baz'
|
14
thefuck/rules/cd_mkdir.py
Normal file
14
thefuck/rules/cd_mkdir.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import re
|
||||||
|
from thefuck.utils import sudo_support
|
||||||
|
|
||||||
|
|
||||||
|
@sudo_support
|
||||||
|
def match(command, settings):
|
||||||
|
return (command.script.startswith('cd ')
|
||||||
|
and ('no such file or directory' in command.stderr.lower()
|
||||||
|
or 'cd: can\'t cd to' in command.stderr.lower()))
|
||||||
|
|
||||||
|
|
||||||
|
@sudo_support
|
||||||
|
def get_new_command(command, settings):
|
||||||
|
return re.sub(r'^cd (.*)', 'mkdir -p \\1 && cd \\1', command.script)
|
Loading…
x
Reference in New Issue
Block a user