From 22efa8f70e4665e6e92392636ff7dd5ff2d369f8 Mon Sep 17 00:00:00 2001 From: Pablo Aguiar Date: Tue, 3 Nov 2020 18:27:09 +0100 Subject: [PATCH] #1113: Do not load excluded rules (#1125) --- tests/test_types.py | 30 ++++++++++++++++-------------- thefuck/types.py | 16 ++++++++-------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/tests/test_types.py b/tests/test_types.py index c9b293e..bea8f59 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -66,20 +66,22 @@ class TestRule(object): == Rule('bash', match, get_new_command, priority=900)) load_source.assert_called_once_with('bash', rule_path) - @pytest.mark.parametrize('rules, exclude_rules, rule, is_enabled', [ - (const.DEFAULT_RULES, [], Rule('git', enabled_by_default=True), True), - (const.DEFAULT_RULES, [], Rule('git', enabled_by_default=False), False), - ([], [], Rule('git', enabled_by_default=False), False), - ([], [], Rule('git', enabled_by_default=True), False), - (const.DEFAULT_RULES + ['git'], [], Rule('git', enabled_by_default=False), True), - (['git'], [], Rule('git', enabled_by_default=False), True), - (const.DEFAULT_RULES, ['git'], Rule('git', enabled_by_default=True), False), - (const.DEFAULT_RULES, ['git'], Rule('git', enabled_by_default=False), False), - ([], ['git'], Rule('git', enabled_by_default=True), False), - ([], ['git'], Rule('git', enabled_by_default=False), False)]) - def test_is_enabled(self, settings, rules, exclude_rules, rule, is_enabled): - settings.update(rules=rules, - exclude_rules=exclude_rules) + def test_from_path_excluded_rule(self, mocker, settings): + load_source = mocker.patch('thefuck.types.load_source') + settings.update(exclude_rules=['git']) + rule_path = os.path.join(os.sep, 'rules', 'git.py') + assert Rule.from_path(Path(rule_path)) is None + assert not load_source.called + + @pytest.mark.parametrize('rules, rule, is_enabled', [ + (const.DEFAULT_RULES, Rule('git', enabled_by_default=True), True), + (const.DEFAULT_RULES, Rule('git', enabled_by_default=False), False), + ([], Rule('git', enabled_by_default=False), False), + ([], Rule('git', enabled_by_default=True), False), + (const.DEFAULT_RULES + ['git'], Rule('git', enabled_by_default=False), True), + (['git'], Rule('git', enabled_by_default=False), True)]) + def test_is_enabled(self, settings, rules, rule, is_enabled): + settings.update(rules=rules) assert rule.is_enabled == is_enabled def test_isnt_match(self): diff --git a/thefuck/types.py b/thefuck/types.py index 027042e..96e6ace 100644 --- a/thefuck/types.py +++ b/thefuck/types.py @@ -136,6 +136,9 @@ class Rule(object): """ name = path.name[:-3] + if name in settings.exclude_rules: + logs.debug(u'Ignoring excluded rule: {}'.format(name)) + return with logs.debug_time(u'Importing rule: {};'.format(name)): try: rule_module = load_source(name, str(path)) @@ -157,14 +160,11 @@ class Rule(object): :rtype: bool """ - if self.name in settings.exclude_rules: - return False - elif self.name in settings.rules: - return True - elif self.enabled_by_default and ALL_ENABLED in settings.rules: - return True - else: - return False + return ( + self.name in settings.rules + or self.enabled_by_default + and ALL_ENABLED in settings.rules + ) def is_match(self, command): """Returns `True` if rule matches the command.