diff options
Diffstat (limited to 'pylint/checkers')
-rw-r--r-- | pylint/checkers/async.py | 8 | ||||
-rw-r--r-- | pylint/checkers/refactoring/recommendation_checker.py | 2 | ||||
-rw-r--r-- | pylint/checkers/utils.py | 5 | ||||
-rw-r--r-- | pylint/checkers/variables.py | 5 |
4 files changed, 17 insertions, 3 deletions
diff --git a/pylint/checkers/async.py b/pylint/checkers/async.py index 1b581c0f1..420c0e211 100644 --- a/pylint/checkers/async.py +++ b/pylint/checkers/async.py @@ -58,7 +58,12 @@ class AsyncChecker(checkers.BaseChecker): if inferred is None or inferred is astroid.Uninferable: continue - if isinstance(inferred, bases.AsyncGenerator): + if isinstance(inferred, astroid.AsyncFunctionDef): + # Check if we are dealing with a function decorated + # with contextlib.asynccontextmanager. + if decorated_with(inferred, self._async_generators): + continue + elif isinstance(inferred, bases.AsyncGenerator): # Check if we are dealing with a function decorated # with contextlib.asynccontextmanager. if decorated_with(inferred.parent, self._async_generators): @@ -79,7 +84,6 @@ class AsyncChecker(checkers.BaseChecker): continue else: continue - self.add_message( "not-async-context-manager", node=node, args=(inferred.name,) ) diff --git a/pylint/checkers/refactoring/recommendation_checker.py b/pylint/checkers/refactoring/recommendation_checker.py index 0ca907f32..1617c934c 100644 --- a/pylint/checkers/refactoring/recommendation_checker.py +++ b/pylint/checkers/refactoring/recommendation_checker.py @@ -67,6 +67,8 @@ class RecommendationChecker(checkers.BaseChecker): return if not self._is_builtin(node.iter.func, "range"): return + if not node.iter.args: + return is_constant_zero = ( isinstance(node.iter.args[0], astroid.Const) and node.iter.args[0].value == 0 diff --git a/pylint/checkers/utils.py b/pylint/checkers/utils.py index 23836f909..6c707e10f 100644 --- a/pylint/checkers/utils.py +++ b/pylint/checkers/utils.py @@ -50,6 +50,7 @@ import itertools import numbers import re import string +import sys from functools import lru_cache, partial from typing import Callable, Dict, Iterable, List, Match, Optional, Set, Tuple, Union @@ -212,6 +213,7 @@ SPECIAL_METHODS_PARAMS = { for name in methods # type: ignore } PYMETHODS = set(SPECIAL_METHODS_PARAMS) +PY310_PLUS = sys.version_info[:2] >= (3, 10) class NoSuchArgumentError(Exception): @@ -1264,6 +1266,9 @@ def get_node_last_lineno(node: astroid.node_classes.NodeNG) -> int: def is_postponed_evaluation_enabled(node: astroid.node_classes.NodeNG) -> bool: """Check if the postponed evaluation of annotations is enabled""" + if PY310_PLUS: + return True + module = node.root() return "annotations" in module.future_imports diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index b6a2978a5..986f76fd2 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -2037,7 +2037,10 @@ class VariablesChecker(BaseChecker): if isinstance(klass._metaclass, astroid.Name): name = klass._metaclass.name elif isinstance(klass._metaclass, astroid.Attribute) and klass._metaclass.expr: - name = klass._metaclass.expr.name + attr = klass._metaclass.expr + while not isinstance(attr, astroid.Name): + attr = attr.expr + name = attr.name elif metaclass: name = metaclass.root().name |