1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-01-31 10:11:14 +00:00

#1113: Do not load excluded rules (#1125)

This commit is contained in:
Pablo Aguiar 2020-11-03 18:27:09 +01:00 committed by GitHub
parent 9d3bcad229
commit 22efa8f70e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 22 deletions

View File

@ -66,20 +66,22 @@ class TestRule(object):
== Rule('bash', match, get_new_command, priority=900)) == Rule('bash', match, get_new_command, priority=900))
load_source.assert_called_once_with('bash', rule_path) load_source.assert_called_once_with('bash', rule_path)
@pytest.mark.parametrize('rules, exclude_rules, rule, is_enabled', [ def test_from_path_excluded_rule(self, mocker, settings):
(const.DEFAULT_RULES, [], Rule('git', enabled_by_default=True), True), load_source = mocker.patch('thefuck.types.load_source')
(const.DEFAULT_RULES, [], Rule('git', enabled_by_default=False), False), settings.update(exclude_rules=['git'])
([], [], Rule('git', enabled_by_default=False), False), rule_path = os.path.join(os.sep, 'rules', 'git.py')
([], [], Rule('git', enabled_by_default=True), False), assert Rule.from_path(Path(rule_path)) is None
(const.DEFAULT_RULES + ['git'], [], Rule('git', enabled_by_default=False), True), assert not load_source.called
(['git'], [], Rule('git', enabled_by_default=False), True),
(const.DEFAULT_RULES, ['git'], Rule('git', enabled_by_default=True), False), @pytest.mark.parametrize('rules, rule, is_enabled', [
(const.DEFAULT_RULES, ['git'], Rule('git', enabled_by_default=False), False), (const.DEFAULT_RULES, Rule('git', enabled_by_default=True), True),
([], ['git'], Rule('git', enabled_by_default=True), False), (const.DEFAULT_RULES, Rule('git', enabled_by_default=False), False),
([], ['git'], Rule('git', enabled_by_default=False), False)]) ([], Rule('git', enabled_by_default=False), False),
def test_is_enabled(self, settings, rules, exclude_rules, rule, is_enabled): ([], Rule('git', enabled_by_default=True), False),
settings.update(rules=rules, (const.DEFAULT_RULES + ['git'], Rule('git', enabled_by_default=False), True),
exclude_rules=exclude_rules) (['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 assert rule.is_enabled == is_enabled
def test_isnt_match(self): def test_isnt_match(self):

View File

@ -136,6 +136,9 @@ class Rule(object):
""" """
name = path.name[:-3] 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)): with logs.debug_time(u'Importing rule: {};'.format(name)):
try: try:
rule_module = load_source(name, str(path)) rule_module = load_source(name, str(path))
@ -157,14 +160,11 @@ class Rule(object):
:rtype: bool :rtype: bool
""" """
if self.name in settings.exclude_rules: return (
return False self.name in settings.rules
elif self.name in settings.rules: or self.enabled_by_default
return True and ALL_ENABLED in settings.rules
elif self.enabled_by_default and ALL_ENABLED in settings.rules: )
return True
else:
return False
def is_match(self, command): def is_match(self, command):
"""Returns `True` if rule matches the command. """Returns `True` if rule matches the command.