mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-31 10:11:14 +00:00
#579: Add missing_space_before_subcommand
rule
This commit is contained in:
parent
14a9cd85aa
commit
2315929875
@ -220,6 +220,7 @@ using the matched rule and runs it. Rules enabled by default are as follows:
|
|||||||
* `man` – changes manual section;
|
* `man` – changes manual section;
|
||||||
* `man_no_space` – fixes man commands without spaces, for example `mandiff`;
|
* `man_no_space` – fixes man commands without spaces, for example `mandiff`;
|
||||||
* `mercurial` – fixes wrong `hg` commands;
|
* `mercurial` – fixes wrong `hg` commands;
|
||||||
|
* `missing_space_before_subcommand` – fixes command with missing space like `npminstall`;
|
||||||
* `mkdir_p` – adds `-p` when you trying to create directory without parent;
|
* `mkdir_p` – adds `-p` when you trying to create directory without parent;
|
||||||
* `mvn_no_command` – adds `clean package` to `mvn`;
|
* `mvn_no_command` – adds `clean package` to `mvn`;
|
||||||
* `mvn_unknown_lifecycle_phase` – fixes misspelled lifecycle phases with `mvn`;
|
* `mvn_unknown_lifecycle_phase` – fixes misspelled lifecycle phases with `mvn`;
|
||||||
|
39
tests/rules/test_missing_space_before_subcommand.py
Normal file
39
tests/rules/test_missing_space_before_subcommand.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import pytest
|
||||||
|
from thefuck.rules.missing_space_before_subcommand import (
|
||||||
|
match, get_new_command)
|
||||||
|
from tests.utils import Command
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def which(mocker):
|
||||||
|
return mocker.patch('thefuck.rules.missing_space_before_subcommand.which',
|
||||||
|
return_value=None)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def all_executables(mocker):
|
||||||
|
return mocker.patch(
|
||||||
|
'thefuck.rules.missing_space_before_subcommand.get_all_executables',
|
||||||
|
return_value=['git', 'ls', 'npm'])
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script', [
|
||||||
|
'gitbranch', 'ls-la', 'npminstall'])
|
||||||
|
def test_match(script):
|
||||||
|
assert match(Command(script))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script, which_result', [
|
||||||
|
('git branch', '/usr/bin/git'),
|
||||||
|
('vimfile', None)])
|
||||||
|
def test_not_match(script, which_result, which):
|
||||||
|
which.return_value = which_result
|
||||||
|
assert not match(Command(script))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script, result', [
|
||||||
|
('gitbranch', 'git branch'),
|
||||||
|
('ls-la', 'ls -la'),
|
||||||
|
('npminstall webpack', 'npm install webpack')])
|
||||||
|
def test_get_new_command(script, result):
|
||||||
|
assert get_new_command(Command(script)) == result
|
18
thefuck/rules/missing_space_before_subcommand.py
Normal file
18
thefuck/rules/missing_space_before_subcommand.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from thefuck.utils import get_all_executables, memoize, which
|
||||||
|
|
||||||
|
|
||||||
|
@memoize
|
||||||
|
def _get_executable(script_part):
|
||||||
|
for executable in get_all_executables():
|
||||||
|
if script_part.startswith(executable):
|
||||||
|
return executable
|
||||||
|
|
||||||
|
|
||||||
|
def match(command):
|
||||||
|
return (not which(command.script_parts[0])
|
||||||
|
and _get_executable(command.script_parts[0]))
|
||||||
|
|
||||||
|
|
||||||
|
def get_new_command(command):
|
||||||
|
executable = _get_executable(command.script_parts[0])
|
||||||
|
return command.script.replace(executable, u'{} '.format(executable), 1)
|
Loading…
x
Reference in New Issue
Block a user