mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-15 16:49:52 +00:00
Pull decision making out of decision_for
Also, this further highlights why naming methods is so hard. I can't think of a better name for 'more_specific_decision_for' that isn't wildly long and unnecessarily verbose.
This commit is contained in:
parent
3921afccff
commit
86e1fb6e64
1 changed files with 28 additions and 22 deletions
|
|
@ -240,12 +240,36 @@ class DecisionEngine(object):
|
||||||
return Decision.Ignored
|
return Decision.Ignored
|
||||||
return Decision.Selected
|
return Decision.Selected
|
||||||
|
|
||||||
|
def make_decision(self, code):
|
||||||
|
"""Decide if code should be ignored or selected."""
|
||||||
|
LOG.debug('Deciding if "%s" should be reported', code)
|
||||||
|
selected = self.was_selected(code)
|
||||||
|
ignored = self.was_ignored(code)
|
||||||
|
LOG.debug('The user configured "%s" to be "%s", "%s"',
|
||||||
|
code, selected, ignored)
|
||||||
|
|
||||||
|
if ((selected is Selected.Explicitly or
|
||||||
|
selected is Selected.Implicitly) and
|
||||||
|
ignored is Selected.Implicitly):
|
||||||
|
decision = Decision.Selected
|
||||||
|
elif ((selected is Selected.Explicitly and
|
||||||
|
ignored is Ignored.Explicitly) or
|
||||||
|
(selected is Ignored.Implicitly and
|
||||||
|
ignored is Selected.Implicitly)):
|
||||||
|
decision = self.more_specific_decision_for(code)
|
||||||
|
elif (selected is Ignored.Implicitly or
|
||||||
|
ignored is Ignored.Explicitly):
|
||||||
|
decision = Decision.Ignored # pylint: disable=R0204
|
||||||
|
return decision
|
||||||
|
|
||||||
def decision_for(self, code):
|
def decision_for(self, code):
|
||||||
# type: (str) -> Decision
|
# type: (str) -> Decision
|
||||||
"""Determine if the error code should be reported or ignored.
|
"""Return the decision for a specific code.
|
||||||
|
|
||||||
This method only cares about the select and ignore rules as specified
|
This method caches the decisions for codes to avoid retracing the same
|
||||||
by the user in their configuration files and command-line flags.
|
logic over and over again. We only care about the select and ignore
|
||||||
|
rules as specified by the user in their configuration files and
|
||||||
|
command-line flags.
|
||||||
|
|
||||||
This method does not look at whether the specific line is being
|
This method does not look at whether the specific line is being
|
||||||
ignored in the file itself.
|
ignored in the file itself.
|
||||||
|
|
@ -255,25 +279,7 @@ class DecisionEngine(object):
|
||||||
"""
|
"""
|
||||||
decision = self.cache.get(code)
|
decision = self.cache.get(code)
|
||||||
if decision is None:
|
if decision is None:
|
||||||
LOG.debug('Deciding if "%s" should be reported', code)
|
decision = self.make_decision(code)
|
||||||
selected = self.was_selected(code)
|
|
||||||
ignored = self.was_ignored(code)
|
|
||||||
LOG.debug('The user configured "%s" to be "%s", "%s"',
|
|
||||||
code, selected, ignored)
|
|
||||||
|
|
||||||
if ((selected is Selected.Explicitly or
|
|
||||||
selected is Selected.Implicitly) and
|
|
||||||
ignored is Selected.Implicitly):
|
|
||||||
decision = Decision.Selected
|
|
||||||
elif ((selected is Selected.Explicitly and
|
|
||||||
ignored is Ignored.Explicitly) or
|
|
||||||
(selected is Ignored.Implicitly and
|
|
||||||
ignored is Selected.Implicitly)):
|
|
||||||
decision = self.more_specific_decision_for(code)
|
|
||||||
elif (selected is Ignored.Implicitly or
|
|
||||||
ignored is Ignored.Explicitly):
|
|
||||||
decision = Decision.Ignored # pylint: disable=R0204
|
|
||||||
|
|
||||||
self.cache[code] = decision
|
self.cache[code] = decision
|
||||||
LOG.debug('"%s" will be "%s"', code, decision)
|
LOG.debug('"%s" will be "%s"', code, decision)
|
||||||
return decision
|
return decision
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue