summaryrefslogtreecommitdiff
path: root/pylint/checkers
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/checkers')
-rw-r--r--pylint/checkers/async.py8
-rw-r--r--pylint/checkers/refactoring/recommendation_checker.py2
-rw-r--r--pylint/checkers/utils.py5
-rw-r--r--pylint/checkers/variables.py5
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