1
0
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:
Vladimir Iakovlev 2017-03-13 22:21:34 +01:00
parent 14a9cd85aa
commit 2315929875
3 changed files with 58 additions and 0 deletions

View File

@ -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`;

View 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

View 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)