summaryrefslogtreecommitdiff
path: root/pylint
diff options
context:
space:
mode:
authorDave Bunten <dave.bunten@cuanschutz.edu>2023-02-08 14:01:58 -0700
committerGitHub <noreply@github.com>2023-02-08 22:01:58 +0100
commit7fd499a903348955cbe120b058659f1fa6a29f1a (patch)
treeebe2a3f13ff25f2470b33be30b2c9f7d6cdf5f23 /pylint
parent4fd7312952923448d1eeb32881bfe35fcda48b86 (diff)
downloadpylint-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.py14
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: