diff options
author | Dave Bunten <dave.bunten@cuanschutz.edu> | 2023-02-08 14:01:58 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-08 22:01:58 +0100 |
commit | 7fd499a903348955cbe120b058659f1fa6a29f1a (patch) | |
tree | ebe2a3f13ff25f2470b33be30b2c9f7d6cdf5f23 /pylint | |
parent | 4fd7312952923448d1eeb32881bfe35fcda48b86 (diff) | |
download | pylint-git-7fd499a903348955cbe120b058659f1fa6a29f1a.tar.gz |
Add import-based submodule detection for preferred-modules (#8186)
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'pylint')
-rw-r--r-- | pylint/checkers/imports.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/pylint/checkers/imports.py b/pylint/checkers/imports.py index d29056b8c..7270ea368 100644 --- a/pylint/checkers/imports.py +++ b/pylint/checkers/imports.py @@ -914,11 +914,21 @@ class ImportsChecker(DeprecatedMixin, BaseChecker): def _check_preferred_module(self, node: ImportNode, mod_path: str) -> None: """Check if the module has a preferred replacement.""" - if mod_path in self.preferred_modules: + + mod_compare = [mod_path] + # build a comparison list of possible names using importfrom + if isinstance(node, astroid.nodes.node_classes.ImportFrom): + mod_compare = [f"{node.modname}.{name[0]}" for name in node.names] + + # find whether there are matches with the import vs preferred_modules keys + matches = [k for k in self.preferred_modules for mod in mod_compare if k in mod] + + # if we have matches, add message + if matches: self.add_message( "preferred-module", node=node, - args=(self.preferred_modules[mod_path], mod_path), + args=(self.preferred_modules[matches[0]], matches[0]), ) def _check_import_as_rename(self, node: ImportNode) -> None: |