mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-18 20:11:17 +00:00
parent
40dd65963d
commit
62dddd5821
@ -281,6 +281,7 @@ following rules are enabled by default:
|
|||||||
* `pyenv_no_such_command` – fixes wrong pyenv commands like `pyenv isntall` or `pyenv list`;
|
* `pyenv_no_such_command` – fixes wrong pyenv commands like `pyenv isntall` or `pyenv list`;
|
||||||
* `python_command` – prepends `python` when you try to run non-executable/without `./` python script;
|
* `python_command` – prepends `python` when you try to run non-executable/without `./` python script;
|
||||||
* `python_execute` – appends missing `.py` when executing Python files;
|
* `python_execute` – appends missing `.py` when executing Python files;
|
||||||
|
* `python_module_error` – fixes ModuleNotFoundError by trying to `pip install` that module;
|
||||||
* `quotation_marks` – fixes uneven usage of `'` and `"` when containing args';
|
* `quotation_marks` – fixes uneven usage of `'` and `"` when containing args';
|
||||||
* `path_from_history` – replaces not found path with similar absolute path from history;
|
* `path_from_history` – replaces not found path with similar absolute path from history;
|
||||||
* `react_native_command_unrecognized` – fixes unrecognized `react-native` commands;
|
* `react_native_command_unrecognized` – fixes unrecognized `react-native` commands;
|
||||||
|
63
tests/rules/test_python_module_error.py
Normal file
63
tests/rules/test_python_module_error.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from thefuck.rules.python_module_error import get_new_command, match
|
||||||
|
from thefuck.types import Command
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def module_error_output(filename, module_name):
|
||||||
|
return """Traceback (most recent call last):
|
||||||
|
File "{0}", line 1, in <module>
|
||||||
|
import {1}
|
||||||
|
ModuleNotFoundError: No module named '{1}'""".format(
|
||||||
|
filename, module_name
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"test",
|
||||||
|
[
|
||||||
|
Command("python hello_world.py", "Hello World"),
|
||||||
|
Command(
|
||||||
|
"./hello_world.py",
|
||||||
|
"""Traceback (most recent call last):
|
||||||
|
File "hello_world.py", line 1, in <module>
|
||||||
|
pritn("Hello World")
|
||||||
|
NameError: name 'pritn' is not defined""",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_not_match(test):
|
||||||
|
assert not match(test)
|
||||||
|
|
||||||
|
|
||||||
|
positive_tests = [
|
||||||
|
(
|
||||||
|
"python some_script.py",
|
||||||
|
"some_script.py",
|
||||||
|
"more_itertools",
|
||||||
|
"pip install more_itertools && python some_script.py",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"./some_other_script.py",
|
||||||
|
"some_other_script.py",
|
||||||
|
"a_module",
|
||||||
|
"pip install a_module && ./some_other_script.py",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"script, filename, module_name, corrected_script", positive_tests
|
||||||
|
)
|
||||||
|
def test_match(script, filename, module_name, corrected_script, module_error_output):
|
||||||
|
assert match(Command(script, module_error_output))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"script, filename, module_name, corrected_script", positive_tests
|
||||||
|
)
|
||||||
|
def test_get_new_command(
|
||||||
|
script, filename, module_name, corrected_script, module_error_output
|
||||||
|
):
|
||||||
|
assert get_new_command(Command(script, module_error_output)) == corrected_script
|
13
thefuck/rules/python_module_error.py
Normal file
13
thefuck/rules/python_module_error.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import re
|
||||||
|
from thefuck.shells import shell
|
||||||
|
|
||||||
|
MISSING_MODULE = r"ModuleNotFoundError: No module named '([^']+)'"
|
||||||
|
|
||||||
|
|
||||||
|
def match(command):
|
||||||
|
return "ModuleNotFoundError: No module named '" in command.output
|
||||||
|
|
||||||
|
|
||||||
|
def get_new_command(command):
|
||||||
|
missing_module = re.findall(MISSING_MODULE, command.output)[0]
|
||||||
|
return shell.and_("pip install {}".format(missing_module), command.script)
|
Loading…
x
Reference in New Issue
Block a user