diff --git a/README.md b/README.md index a0c86716..e9c419b1 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,7 @@ following rules are enabled by default: * `java` – removes `.java` extension when running Java programs; * `javac` – appends missing `.java` when compiling Java files; * `lein_not_task` – fixes wrong `lein` tasks like `lein rpl`; +* `long_form_help` – changes `-h` to `--help` when the short form version is not supported * `ln_no_hard_link` – catches hard link creation on directories, suggest symbolic link; * `ln_s_order` – fixes `ln -s` arguments order; * `ls_all` – adds `-A` to `ls` when output is empty; diff --git a/tests/rules/test_long_form_help.py b/tests/rules/test_long_form_help.py new file mode 100644 index 00000000..e3a12bef --- /dev/null +++ b/tests/rules/test_long_form_help.py @@ -0,0 +1,22 @@ +import pytest +from thefuck.rules.long_form_help import match, get_new_command +from thefuck.types import Command + + +@pytest.mark.parametrize('output', [ + 'Try \'grep --help\' for more information.']) +def test_match(output): + assert match(Command('grep -h', output)) + + +def test_not_match(): + assert not match(Command('', '')) + + +@pytest.mark.parametrize('before, after', [ + ('grep -h', 'grep --help'), + ('tar -h', 'tar --help'), + ('docker run -h', 'docker run --help'), + ('cut -h', 'cut --help')]) +def test_get_new_command(before, after): + assert get_new_command(Command(before, '')) == after diff --git a/thefuck/rules/long_form_help.py b/thefuck/rules/long_form_help.py new file mode 100644 index 00000000..3ff7a23f --- /dev/null +++ b/thefuck/rules/long_form_help.py @@ -0,0 +1,27 @@ +from thefuck.utils import replace_argument +import re + +# regex to match a suggested help command from the tool output +help_regex = r"(?:Run|Try) '([^']+)'(?: or '[^']+')? for (?:details|more information)." + + +def match(command): + if re.search(help_regex, command.output, re.I) is not None: + return True + + if '--help' in command.output: + return True + + return False + + +def get_new_command(command): + if re.search(help_regex, command.output) is not None: + match_obj = re.search(help_regex, command.output, re.I) + return match_obj.group(1) + + return replace_argument(command.script, '-h', '--help') + + +enabled_by_default = True +priority = 5000