diff options
Diffstat (limited to 'pylint/lint.py')
-rw-r--r-- | pylint/lint.py | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/pylint/lint.py b/pylint/lint.py index 80430e3a0..a24daa922 100644 --- a/pylint/lint.py +++ b/pylint/lint.py @@ -60,6 +60,7 @@ """ from __future__ import print_function +import argparse import collections import contextlib import operator @@ -1091,6 +1092,7 @@ class Runner(object): class CLIRunner(Runner): option_definitions = ( + ("module_or_package", {"positional": True, "nargs": argparse.REMAINDER}), ( "rcfile", { @@ -1233,6 +1235,7 @@ group are mutually exclusive.", self._plugin_registry = PluginRegistry(self._global_config) self._loaded_plugins = set() self._reporter = None + self._config_parsers = [] def run(self, args): # Phase 1: Preprocessing @@ -1298,6 +1301,8 @@ group are mutually exclusive.", file_parser.add_option_definitions(options) self._plugin_registry.register_options = register_options + self._file_parser = file_parser + self._cli_parser = parser checkers.initialize(self._plugin_registry) @@ -1317,7 +1322,9 @@ group are mutually exclusive.", if rcfile: file_parser.parse(rcfile, self._global_config) # Fully load CLI into global config - parser.parse(args, self._global_config) + self._cli_config = config.Configuration() + parser.parse(args, self._cli_config) + self._global_config += self._cli_config if self._global_config.generate_rcfile: file_parser.write() @@ -1442,10 +1449,7 @@ group are mutually exclusive.", # XXX code below needs refactoring to be more reporter agnostic self._reporter.on_close(self._plugin_registry.stats, previous_stats) if self._global_config.reports: - # TODO: The Runner should make reports, not the registry. - sect = self._plugin_registry.make_reports( - self._plugin_registry.stats, previous_stats - ) + sect = self.make_reports(self._plugin_registry.stats, previous_stats) else: sect = report_nodes.Section() @@ -1602,6 +1606,22 @@ group are mutually exclusive.", self._global_config.black_list, self._global_config.black_list_re, ) + config_store = config.ConfigurationStore() + for module_desc in expanded_files: + directory = os.path.dirname(module_desc.path) + + local_config = config_store[directory] + if not local_config: + local_file = config.find_nearby_pylintrc(directory) + if not local_file: + local_config = self._global_config + else: + local_config = self._global_config.copy() + self._file_parser.parse(local_file, local_config) + local_config += self._cli_config + + config_store[directory] = local_config + for module_desc in expanded_files: modname = module_desc.name filepath = module_desc.path @@ -1610,9 +1630,11 @@ group are mutually exclusive.", ): continue - linter = PyLinter(self._global_config) + directory = os.path.dirname(module_desc.path) + local_config = config_store.get_config_for(directory) + linter = PyLinter(local_config) linter.msgs_store = self._plugin_registry.msgs_store - for msg_ids, enable in self._global_config.msg_toggles: + for msg_ids, enable in local_config.msg_toggles: for msg_id in msg_ids: if enable: linter.enable(msg_id, scope="directory") |