diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py new file mode 100644 index 00000000..e8071263 --- /dev/null +++ b/tests/rules/test_python_command.py @@ -0,0 +1,9 @@ +from thefuck.main import Command +from thefuck.rules.python_command import match, get_new_command + +def test_match(): + assert match(Command('temp.py', '', 'Permission denied'), None) + assert not match(Command('', '', ''), None) + +def test_get_new_command(): + assert get_new_command(Command('./test_sudo.py', '', ''), None) == 'python ./test_sudo.py' diff --git a/thefuck/main.py b/thefuck/main.py index adb0084d..36c0a9a2 100644 --- a/thefuck/main.py +++ b/thefuck/main.py @@ -51,7 +51,7 @@ def get_rules(user_dir, settings): .joinpath('rules')\ .glob('*.py') user = user_dir.joinpath('rules').glob('*.py') - return [load_rule(rule) for rule in list(bundled) + list(user) + return [load_rule(rule) for rule in sorted(list(bundled)) + list(user) if rule.name != '__init__.py' and is_rule_enabled(settings, rule)] diff --git a/thefuck/rules/python_command.py b/thefuck/rules/python_command.py new file mode 100644 index 00000000..3fc47827 --- /dev/null +++ b/thefuck/rules/python_command.py @@ -0,0 +1,13 @@ +# add 'python' suffix to the command if +# 1) The script does not have execute permission or +# 2) is interpreted as shell script + +def match(command, settings): + toks = command.script.split() + return (len(toks) > 0 + and toks[0].endswith('.py') + and ('Permission denied' in command.stderr or + 'command not found' in command.stderr)) + +def get_new_command(command, settings): + return 'python ' + command.script