diff options
-rw-r--r-- | pylint/lint.py | 59 | ||||
-rw-r--r-- | pylint/utils.py | 8 |
2 files changed, 31 insertions, 36 deletions
diff --git a/pylint/lint.py b/pylint/lint.py index 29739f5dd..5881fbe83 100644 --- a/pylint/lint.py +++ b/pylint/lint.py @@ -895,23 +895,21 @@ class ReportRegistry: class PluginRegistry(utils.MessagesHandlerMixIn, ReportRegistry): """A class to register checkers to.""" - def __init__(self, linter, register_options=(lambda options: None)): - super().__init__(linter.config, linter.msgs_store, linter.stats) + def __init__(self, config, register_options=(lambda options: None)): + super().__init__(config) self.register_options = register_options self._checkers = collections.defaultdict(list) - # TODO: Remove. This is needed for the MessagesHandlerMixIn for now. - linter._checkers = self._checkers self._reporters = {} self._python3_porting_mode = False self._error_mode = False - for r_id, r_title, r_cb in linter.reports: - self.register_report(r_id, r_title, r_cb, linter) + for r_id, r_title, r_cb in PyLinter.reports: + self.register_report(r_id, r_title, r_cb, PyLinter) - self.register_options(linter.options) + self.register_options(PyLinter.options) - self.msgs_store.register_messages_from_checker(linter) + self.msgs_store.register_messages_from_checker(PyLinter) def for_all_checkers(self): """Loop through all registered checkers. @@ -1219,8 +1217,7 @@ group are mutually exclusive.", def __init__(self): super().__init__() self._global_config = config.Configuration() - self._linter = PyLinter(self._global_config) - self._plugin_registry = PluginRegistry(self._linter) + self._plugin_registry = PluginRegistry(self._global_config) self._loaded_plugins = set() self._reporter = None @@ -1263,7 +1260,6 @@ group are mutually exclusive.", ) self._global_config.add_options(option_definitions) - self._linter.config = self._global_config parsed = parser.preprocess( args, @@ -1365,16 +1361,16 @@ group are mutually exclusive.", with fix_import_path(self._global_config.module_or_package): assert self._global_config.jobs == 1 - base_name = self.check( + base_name, status_code = self.check( self._global_config.module_or_package, self.prepare_checkers() ) self.generate_reports(base_name) - if linter.config.exit_zero: + if self._global_config.config.exit_zero: sys.exit(0) else: - sys.exit(self.linter.msg_status) + sys.exit(status_code) def load_plugin(self, module_name): if module_name in self._loaded_plugins: @@ -1463,11 +1459,11 @@ group are mutually exclusive.", reports = self._plugin_registry.reports reports = sorted(reports, key=lambda x: getattr(x, "name", "")) try: - reports.remove(self._linter) + reports.remove(PyLinter) except ValueError: pass else: - reports.append(self._linter) + reports.append(PyLinter) return reports def make_reports(self, stats, old_stats): @@ -1485,7 +1481,7 @@ group are mutually exclusive.", "Report", "%s statements analysed." % (stats["statement"]) ) for checker in self.report_order(): - for reportid, r_title, r_cb in self.reports[checker]: + for reportid, r_title, r_cb in self._plugin_registry.reports[checker]: if not self.report_is_enabled(reportid): continue report_sect = report_nodes.Section(r_title) @@ -1526,14 +1522,12 @@ group are mutually exclusive.", def get_checkers(self): """return all available checkers as a list""" - return [self._linter] + [ - c for c in self._plugin_registry.for_all_checkers() if c is not self._linter - ] + return [c for c in self._plugin_registry.for_all_checkers()] def prepare_checkers(self): """return checkers needed for activated messages and reports""" # get needed checkers - neededcheckers = [self._linter] + neededcheckers = [] for checker in self.get_checkers()[1:]: messages = set( msg @@ -1544,8 +1538,6 @@ group are mutually exclusive.", self._plugin_registry.report_is_enabled(r[0]) for r in checker.reports ): neededcheckers.append(checker) - # TODO: Remove need for this - checker.linter = self._linter # Sort checkers by priority neededcheckers = sorted( neededcheckers, key=operator.attrgetter("priority"), reverse=True @@ -1583,24 +1575,26 @@ group are mutually exclusive.", """ # initialize msgs_state now that all messages have been registered into # the store - # TODO: Move this - self._plugin_registry._init_msg_states() + self._plugin_registry.init_msg_states() if not isinstance(files_or_modules, (list, tuple)): files_or_modules = (files_or_modules,) walker = utils.PyLintASTWalker(self._plugin_registry) tokencheckers = [ - c - for c in checkers_ - if interfaces.implements(c, interfaces.ITokenChecker) - and c is not self._linter + c for c in checkers_ if interfaces.implements(c, interfaces.ITokenChecker) ] rawcheckers = [ c for c in checkers_ if interfaces.implements(c, interfaces.IRawChecker) ] # notify global begin + linter = PyLinter(self._global_config) + linter.config = self._global_config + linter.msgs_store = self._plugin_registry.msgs_store + linter.stats = self._plugin_registry.stats + linter.open() for checker in checkers_: + checker.linter = linter checker.open() if interfaces.implements(checker, interfaces.IAstroidChecker): walker.add_checker(checker) @@ -1619,15 +1613,16 @@ group are mutually exclusive.", ): continue - self._linter.reporter = self._reporter - self._linter.check(module_desc, walker, rawcheckers, tokencheckers) + linter.reporter = self._reporter + linter.check(module_desc, walker, rawcheckers, tokencheckers) # notify global end self._plugin_registry.stats["statement"] = walker.nbstatements for checker in reversed(checkers_): checker.close() + linter.close() - return module_desc.basename + return module_desc.basename, linter.msg_status if __name__ == "__main__": diff --git a/pylint/utils.py b/pylint/utils.py index c6c78207e..4a5966656 100644 --- a/pylint/utils.py +++ b/pylint/utils.py @@ -280,14 +280,14 @@ class MessagesHandlerMixIn: __by_id_managed_msgs = [] # type: ignore - def __init__(self, config, msgs_store=None, stats=None): + def __init__(self, config): self.config = config self.file_state = None self._msgs_state = {} self.msg_status = 0 - self.msgs_store = msgs_store or MessagesStore() + self.msgs_store = MessagesStore() self.reporter = None - self.stats = stats or {"by_module": {}, "by_msg": {}} + self.stats = {"by_module": {}, "by_msg": {}} super().__init__() def _checker_messages(self, checker): @@ -418,7 +418,7 @@ class MessagesHandlerMixIn: for msgid in msgids: self.disable(msgid) - def _init_msg_states(self): + def init_msg_states(self): for msg in self.msgs_store.messages: if not msg.may_be_emitted(): self._msgs_state[msg.msgid] = False |