diff --git a/tests/conftest.py b/tests/conftest.py index e54acfc0..2579594e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,3 +1,4 @@ +from pathlib import Path import pytest from thefuck import conf @@ -16,7 +17,12 @@ def no_memoize(monkeypatch): @pytest.fixture(autouse=True) def settings(request): - request.addfinalizer(lambda: conf.settings.update(conf.DEFAULT_SETTINGS)) + def _reset_settings(): + conf.settings.clear() + conf.settings.update(conf.DEFAULT_SETTINGS) + + request.addfinalizer(_reset_settings) + conf.settings.user_dir = Path('~/.thefuck') return conf.settings diff --git a/tests/test_corrector.py b/tests/test_corrector.py index 61a6d06b..f6bf2c7c 100644 --- a/tests/test_corrector.py +++ b/tests/test_corrector.py @@ -25,7 +25,7 @@ class TestGetRules(object): @pytest.fixture def glob(self, mocker): results = {} - mocker.patch('thefuck.corrector.Path.glob', + mocker.patch('pathlib.Path.glob', new_callable=lambda: lambda *_: results.pop('value', [])) return lambda value: results.update({'value': value}) @@ -54,7 +54,7 @@ class TestGetRules(object): settings.update(rules=self._prepare_rules(conf_rules), priority={}, exclude_rules=self._prepare_rules(exclude_rules)) - rules = corrector.get_rules(Path('~')) + rules = corrector.get_rules() self._compare_names(rules, loaded_rules) @@ -98,5 +98,5 @@ def test_get_corrected_commands(mocker): get_new_command=lambda x: [x.script + '@', x.script + ';'], priority=60)] mocker.patch('thefuck.corrector.get_rules', return_value=rules) - assert [cmd.script for cmd in get_corrected_commands(command, None)] \ + assert [cmd.script for cmd in get_corrected_commands(command)] \ == ['test!', 'test@', 'test;'] diff --git a/thefuck/conf.py b/thefuck/conf.py index 2b8178ba..bd7e476b 100644 --- a/thefuck/conf.py +++ b/thefuck/conf.py @@ -109,6 +109,8 @@ def init_settings(user_dir): """Fills `settings` with values from `settings.py` and env.""" from .logs import exception + settings.user_dir = user_dir + try: settings.update(_settings_from_file(user_dir)) except Exception: diff --git a/thefuck/corrector.py b/thefuck/corrector.py index 14257684..b9433624 100644 --- a/thefuck/corrector.py +++ b/thefuck/corrector.py @@ -31,12 +31,12 @@ def get_loaded_rules(rules): yield loaded_rule -def get_rules(user_dir): +def get_rules(): """Returns all enabled rules.""" bundled = Path(__file__).parent \ .joinpath('rules') \ .glob('*.py') - user = user_dir.joinpath('rules').glob('*.py') + user = settings.user_dir.joinpath('rules').glob('*.py') return sorted(get_loaded_rules(sorted(bundled) + sorted(user)), key=lambda rule: rule.priority) @@ -66,9 +66,9 @@ def make_corrected_commands(command, rule): priority=(n + 1) * rule.priority) -def get_corrected_commands(command, user_dir): +def get_corrected_commands(command): corrected_commands = ( - corrected for rule in get_rules(user_dir) + corrected for rule in get_rules() if is_rule_match(command, rule) for corrected in make_corrected_commands(command, rule)) return SortedCorrectedCommandsSequence(corrected_commands) diff --git a/thefuck/main.py b/thefuck/main.py index 497d97e7..541ac928 100644 --- a/thefuck/main.py +++ b/thefuck/main.py @@ -98,7 +98,7 @@ def fix_command(): logs.debug('Empty command, nothing to do') return - corrected_commands = get_corrected_commands(command, user_dir) + corrected_commands = get_corrected_commands(command) selected_command = select_command(corrected_commands) if selected_command: run_command(command, selected_command)