summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2010-12-09 11:00:07 +0100
committerEmile Anclin <emile.anclin@logilab.fr>2010-12-09 11:00:07 +0100
commitcb2e51b161099e5890a4e438605b38203d9fecad (patch)
treed3e03113bd3e0c5849c23388c54a7beed89d013e
parentbe454880a7685ea76fc97de87ca606b4380793b2 (diff)
downloadpylint-git-cb2e51b161099e5890a4e438605b38203d9fecad.tar.gz
cleanup: remove unused needs_checkers attribut and sort_checkers method
what was expected to be accomplished needs_checkers will be done easier with a decorator
-rw-r--r--checkers/__init__.py2
-rw-r--r--lint.py46
-rw-r--r--test/unittest_lint.py4
-rw-r--r--utils.py8
4 files changed, 20 insertions, 40 deletions
diff --git a/checkers/__init__.py b/checkers/__init__.py
index 40433cf8b..a8d2bf164 100644
--- a/checkers/__init__.py
+++ b/checkers/__init__.py
@@ -70,8 +70,6 @@ class BaseChecker(OptionsProviderMixIn, ASTWalker):
level = 1
# ordered list of options to control the ckecker behaviour
options = ()
- # checker that should be run before this one
- needs_checkers = ()
# messages issued by this checker
msgs = {}
# reports issued by this checker
diff --git a/lint.py b/lint.py
index 6e602f644..47d168166 100644
--- a/lint.py
+++ b/lint.py
@@ -42,7 +42,6 @@ from logilab.common.modutils import load_module_from_name
from logilab.common.interface import implements
from logilab.common.textutils import splitstrip
from logilab.common.ureports import Table, Text, Section
-from logilab.common.graph import ordered_nodes
from logilab.common.__pkginfo__ import version as common_version
from logilab.astng import MANAGER, nodes
@@ -422,35 +421,20 @@ This is used by the global evaluation report (RP0004).'}),
# code checking methods ###################################################
- def sort_checkers(self, checkers=None):
- if checkers is None:
- checkers = [checker for checkers in self._checkers.values()
- for checker in checkers]
- graph = {}
- cls_instance = {}
- for checker in checkers:
- graph[checker.__class__] = set(checker.needs_checkers)
- cls_instance[checker.__class__] = checker
- checkers = [cls_instance.get(cls) for cls in ordered_nodes(graph)]
- checkers.remove(self)
- checkers.insert(0, self)
- return checkers
-
- def _get_checkers(self):
- # compute checkers needed according to activated messages and reports
- neededcheckers = set()
- for checkers in self._checkers.values():
- for checker in checkers:
- for msgid in checker.msgs:
- if self._msgs_state.get(msgid, True):
- neededcheckers.add(checker)
- break
- else:
- for reportid, _, _ in checker.reports:
- if self.is_report_enabled(reportid):
- neededcheckers.add(checker)
- break
- return self.sort_checkers(neededcheckers)
+ def get_checkers(self):
+ """return all available checkers as a list"""
+ return [self] + [c for checkers in self._checkers.values()
+ for c in checkers if c is not self]
+
+ def needed_checkers(self):
+ """return checkers needed for activated messages and reports"""
+ neededcheckers = []
+ get_msg = self._msgs_state.get
+ for checker in self.get_checkers():
+ if ( any(get_msg(msg, True) for msg in checker.msgs) or
+ any(get_msg(msg, True) for msg in checker.reports) ):
+ neededcheckers.append(checker)
+ return neededcheckers
def check(self, files_or_modules):
"""main checking entry: check a list of files or modules from their
@@ -459,7 +443,7 @@ This is used by the global evaluation report (RP0004).'}),
self.reporter.include_ids = self.config.include_ids
if not isinstance(files_or_modules, (list, tuple)):
files_or_modules = (files_or_modules,)
- checkers = self._get_checkers()
+ checkers = self.needed_checkers()
rawcheckers = []
walker = PyLintASTWalker()
# notify global begin
diff --git a/test/unittest_lint.py b/test/unittest_lint.py
index 81d1d399b..aed068d20 100644
--- a/test/unittest_lint.py
+++ b/test/unittest_lint.py
@@ -223,9 +223,9 @@ class PyLinterTC(TestCase):
def test_enable_checkers(self):
self.linter.disable('design')
- self.failIf('design' in set([c.name for c in self.linter._get_checkers()]))
+ self.failIf('design' in [c.name for c in self.linter.needed_checkers()])
self.linter.enable('design')
- self.failUnless('design' in set([c.name for c in self.linter._get_checkers()]))
+ self.failUnless('design' in [c.name for c in self.linter.needed_checkers()])
class ConfigTC(TestCase):
diff --git a/utils.py b/utils.py
index 37dae4b27..ca20eedf2 100644
--- a/utils.py
+++ b/utils.py
@@ -288,7 +288,7 @@ class MessagesHandlerMixIn:
def print_full_documentation(self):
"""output a full documentation in ReST format"""
by_checker = {}
- for checker in self.sort_checkers():
+ for checker in self.get_checkers():
if checker.name == 'master':
prefix = 'Main '
print "Options"
@@ -343,7 +343,7 @@ class MessagesHandlerMixIn:
def list_messages(self):
"""output full messages list documentation in ReST format"""
msgids = []
- for checker in self.sort_checkers():
+ for checker in self.get_checkers():
for msgid in checker.msgs.keys():
msgids.append(msgid)
msgids.sort()
@@ -394,9 +394,7 @@ class ReportsHandlerMixIn:
self.reporter.set_output(open(filename, 'w'))
sect = Section('Report',
'%s statements analysed.'% (self.stats['statement']))
- checkers = self.sort_checkers(self._reports)
- checkers.reverse()
- for checker in checkers:
+ for checker in self._reports:
for reportid, r_title, r_cb in self._reports[checker]:
if not self.is_report_enabled(reportid):
continue