summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshley Whetter <ashley@awhetter.co.uk>2018-05-16 14:22:01 -0700
committerAshley Whetter <ashley@awhetter.co.uk>2019-02-09 13:40:53 -0800
commit998efd9addd4edd1a57193c7eb96b46fc8f39468 (patch)
treead7a038d2f47258acfa120e0552397c629a741dc
parent8468a86bd5f32d5c3c5b5794b396892e3bee04e9 (diff)
downloadpylint-git-998efd9addd4edd1a57193c7eb96b46fc8f39468.tar.gz
There is no longer a global linter object
-rw-r--r--pylint/lint.py59
-rw-r--r--pylint/utils.py8
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