summaryrefslogtreecommitdiff
path: root/pylint/checkers/imports.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/checkers/imports.py')
-rw-r--r--pylint/checkers/imports.py22
1 files changed, 10 insertions, 12 deletions
diff --git a/pylint/checkers/imports.py b/pylint/checkers/imports.py
index abecc1712..3e0b39d26 100644
--- a/pylint/checkers/imports.py
+++ b/pylint/checkers/imports.py
@@ -70,7 +70,6 @@ from pylint.graph import DotBackend, get_cycles
from pylint.interfaces import IAstroidChecker
from pylint.lint import PyLinter
from pylint.reporters.ureports.nodes import Paragraph, Section, VerbatimText
-from pylint.typing import CheckerStats
from pylint.utils import IsortDriver, get_global_option
@@ -170,26 +169,27 @@ def _repr_tree_defs(data, indent_str=None):
return "\n".join(lines)
-def _dependencies_graph(filename: str, dep_info: Dict[str, List[str]]) -> str:
+def _dependencies_graph(filename: str, dep_info: Dict[str, Set[str]]) -> str:
"""write dependencies as a dot (graphviz) file"""
done = {}
printer = DotBackend(os.path.splitext(os.path.basename(filename))[0], rankdir="LR")
printer.emit('URL="." node[shape="box"]')
for modname, dependencies in sorted(dep_info.items()):
+ sorted_dependencies = sorted(dependencies)
done[modname] = 1
printer.emit_node(modname)
- for depmodname in dependencies:
+ for depmodname in sorted_dependencies:
if depmodname not in done:
done[depmodname] = 1
printer.emit_node(depmodname)
for depmodname, dependencies in sorted(dep_info.items()):
- for modname in dependencies:
+ for modname in sorted(dependencies):
printer.emit_edge(modname, depmodname)
return printer.generate(filename)
def _make_graph(
- filename: str, dep_info: Dict[str, List[str]], sect: Section, gtype: str
+ filename: str, dep_info: Dict[str, Set[str]], sect: Section, gtype: str
):
"""generate a dependencies graph and add some information about it in the
report's section
@@ -428,7 +428,6 @@ class ImportsChecker(DeprecatedMixin, BaseChecker):
self, linter: Optional[PyLinter] = None
): # pylint: disable=super-init-not-called # See https://github.com/PyCQA/pylint/issues/4941
BaseChecker.__init__(self, linter)
- self.stats: CheckerStats = {}
self.import_graph: collections.defaultdict = collections.defaultdict(set)
self._imports_stack: List[Tuple[Any, Any]] = []
self._first_non_import_node = None
@@ -470,9 +469,8 @@ class ImportsChecker(DeprecatedMixin, BaseChecker):
def open(self):
"""called before visiting project (i.e set of modules)"""
- self.linter.add_stats(dependencies={})
- self.linter.add_stats(cycles=[])
- self.stats = self.linter.stats
+ self.linter.stats.dependencies = {}
+ self.linter.stats = self.linter.stats
self.import_graph = collections.defaultdict(set)
self._module_pkg = {} # mapping of modules to the pkg they belong in
self._excluded_edges = collections.defaultdict(set)
@@ -859,7 +857,7 @@ class ImportsChecker(DeprecatedMixin, BaseChecker):
self._module_pkg[context_name] = context_name.rsplit(".", 1)[0]
# handle dependencies
- dependencies_stat: Dict[str, Union[Set]] = self.stats["dependencies"] # type: ignore
+ dependencies_stat: Dict[str, Union[Set]] = self.linter.stats.dependencies
importedmodnames = dependencies_stat.setdefault(importedmodname, set())
if context_name not in importedmodnames:
importedmodnames.add(context_name)
@@ -935,7 +933,7 @@ class ImportsChecker(DeprecatedMixin, BaseChecker):
def _report_dependencies_graph(self, sect, _, _dummy):
"""write dependencies as a dot (graphviz) file"""
- dep_info = self.stats["dependencies"]
+ dep_info = self.linter.stats.dependencies
if not dep_info or not (
self.config.import_graph
or self.config.ext_import_graph
@@ -955,7 +953,7 @@ class ImportsChecker(DeprecatedMixin, BaseChecker):
def _filter_dependencies_graph(self, internal):
"""build the internal or the external dependency graph"""
graph = collections.defaultdict(set)
- for importee, importers in self.stats["dependencies"].items():
+ for importee, importers in self.linter.stats.dependencies.items():
for importer in importers:
package = self._module_pkg.get(importer, importer)
is_inside = importee.startswith(package)