From 020af153db23b37da6370a5cc70ba967245f42c0 Mon Sep 17 00:00:00 2001 From: Florence Blanc-Renaud Date: Jan 09 2024 07:40:47 +0000 Subject: pylint: updates related to deprecations pylint 3.0 has deprectated a few functions: - check_messages: Use utils.only_required_for_messages - The config attribute of BaseChecker has been deprecated. You can use checker.linter.config to access the global configuration object instead of a checker-specific object - Everything related to the __implements__ construct was removed. - Checker should only inherit BaseChecker or any of the other checker types from pylint.checkers. Signed-off-by: Florence Blanc-Renaud Reviewed-By: Alexander Bokovoy Reviewed-By: Rob Crittenden --- diff --git a/.wheelconstraints.in b/.wheelconstraints.in index 2c8e11b..cd95619 100644 --- a/.wheelconstraints.in +++ b/.wheelconstraints.in @@ -10,5 +10,5 @@ ipaserver == @VERSION@ ipatests == @VERSION@ # keep pylint version in sync with current Fedora release -# F37 has 2.15.5 -pylint ~= 2.15.5 +# F39 has 3.0.25 +pylint ~= 3.0.2 diff --git a/pylint_plugins.py b/pylint_plugins.py index c101a47..d75da3f 100644 --- a/pylint_plugins.py +++ b/pylint_plugins.py @@ -10,10 +10,9 @@ import sys import textwrap from astroid import MANAGER, register_module_extender -from astroid import scoped_nodes +from astroid.nodes import scoped_nodes from pylint.checkers import BaseChecker -from pylint.checkers.utils import check_messages -from pylint.interfaces import IAstroidChecker +from pylint.checkers.utils import only_required_for_messages from astroid.builder import AstroidBuilder @@ -33,14 +32,18 @@ def fake_class(name_or_class_obj, members=()): if isinstance(name_or_class_obj, scoped_nodes.ClassDef): cl = name_or_class_obj else: - cl = scoped_nodes.ClassDef(name_or_class_obj, None) + cl = scoped_nodes.ClassDef( + name=name_or_class_obj, lineno=None, col_offset=None, parent=None, + end_lineno=None, end_col_offset=None) for m in members: if isinstance(m, str): if m in cl.locals: _warning_already_exists(cl, m) else: - cl.locals[m] = [scoped_nodes.ClassDef(m, None)] + cl.locals[m] = [scoped_nodes.ClassDef( + name=m, lineno=None, col_offset=None, parent=None, + end_lineno=None, end_col_offset=None)] elif isinstance(m, dict): for key, val in m.items(): assert isinstance(key, str), "key must be string" @@ -250,7 +253,6 @@ register_module_extender(MANAGER, 'ipalib.request', ipalib_request_transform) class IPAChecker(BaseChecker): - __implements__ = IAstroidChecker name = 'ipa' msgs = { @@ -278,7 +280,7 @@ class IPAChecker(BaseChecker): self._dir = os.path.abspath(os.path.dirname(__file__)) self._forbidden_imports = {self._dir: []} - for forbidden_import in self.config.forbidden_imports: + for forbidden_import in self.linter.config.forbidden_imports: forbidden_import = forbidden_import.split(':') path = os.path.join(self._dir, forbidden_import[0]) path = os.path.abspath(path) @@ -320,12 +322,12 @@ class IPAChecker(BaseChecker): self.add_message('ipa-forbidden-import', args=(name, module, relpath), node=node) - @check_messages('ipa-forbidden-import') + @only_required_for_messages('ipa-forbidden-import') def visit_import(self, node): names = [n[0] for n in node.names] self._check_forbidden_imports(node, names) - @check_messages('ipa-forbidden-import') + @only_required_for_messages('ipa-forbidden-import') def visit_importfrom(self, node): names = ['{}.{}'.format(node.modname, n[0]) for n in node.names] self._check_forbidden_imports(node, names)