summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel van Noord <13665637+DanielNoord@users.noreply.github.com>2023-03-06 08:56:07 +0100
committerDaniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>2023-03-07 21:53:22 +0100
commitb4fe93a9f8059efb0b462d879da3c3d8ef9e7010 (patch)
tree0d9d14d714a00b961ebebc29fa95d42fb1b1af4a
parent9c4fbedb368d87c383f86ece309a2473e6b1e68a (diff)
downloadpylint-git-b4fe93a9f8059efb0b462d879da3c3d8ef9e7010.tar.gz
Use UninferableBase instead of Uninferable
-rw-r--r--pylint/checkers/async.py4
-rw-r--r--pylint/checkers/base/basic_checker.py10
-rw-r--r--pylint/checkers/classes/class_checker.py15
-rw-r--r--pylint/checkers/classes/special_methods_checker.py4
-rw-r--r--pylint/checkers/dunder_methods.py7
-rw-r--r--pylint/checkers/exceptions.py12
-rw-r--r--pylint/checkers/refactoring/implicit_booleaness_checker.py6
-rw-r--r--pylint/checkers/refactoring/refactoring_checker.py14
-rw-r--r--pylint/checkers/stdlib.py8
-rw-r--r--pylint/checkers/strings.py12
-rw-r--r--pylint/checkers/typecheck.py31
-rw-r--r--pylint/checkers/utils.py19
-rw-r--r--pylint/checkers/variables.py8
-rw-r--r--pylint/extensions/_check_docs_utils.py6
-rw-r--r--pylint/extensions/overlapping_exceptions.py4
-rw-r--r--pylint/pyreverse/diagrams.py4
-rw-r--r--pylint/pyreverse/inspector.py4
17 files changed, 87 insertions, 81 deletions
diff --git a/pylint/checkers/async.py b/pylint/checkers/async.py
index a470cde17..b06ec60c8 100644
--- a/pylint/checkers/async.py
+++ b/pylint/checkers/async.py
@@ -10,7 +10,7 @@ import sys
from typing import TYPE_CHECKING
import astroid
-from astroid import nodes
+from astroid import nodes, util
from pylint import checkers
from pylint.checkers import utils as checker_utils
@@ -55,7 +55,7 @@ class AsyncChecker(checkers.BaseChecker):
def visit_asyncwith(self, node: nodes.AsyncWith) -> None:
for ctx_mgr, _ in node.items:
inferred = checker_utils.safe_infer(ctx_mgr)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
continue
if isinstance(inferred, nodes.AsyncFunctionDef):
diff --git a/pylint/checkers/base/basic_checker.py b/pylint/checkers/base/basic_checker.py
index 2a657af77..08d582b7f 100644
--- a/pylint/checkers/base/basic_checker.py
+++ b/pylint/checkers/base/basic_checker.py
@@ -13,7 +13,7 @@ from collections.abc import Iterator
from typing import TYPE_CHECKING, cast
import astroid
-from astroid import nodes, objects
+from astroid import nodes, objects, util
from pylint import utils as lint_utils
from pylint.checkers import BaseChecker, utils
@@ -333,7 +333,9 @@ class BasicChecker(_BasicChecker):
maybe_generator_call = None
if not isinstance(test, except_nodes):
inferred = utils.safe_infer(test)
- if inferred is astroid.Uninferable and isinstance(test, nodes.Name):
+ if isinstance(inferred, util.UninferableBase) and isinstance(
+ test, nodes.Name
+ ):
emit, maybe_generator_call = BasicChecker._name_holds_generator(test)
# Emit if calling a function that only returns GeneratorExp (always tests True)
@@ -677,7 +679,7 @@ class BasicChecker(_BasicChecker):
return
expr = utils.safe_infer(call_node.func.expr)
- if expr is astroid.Uninferable:
+ if isinstance(expr, util.UninferableBase):
return
if not expr:
# we are doubtful on inferred type of node, so here just check if format
@@ -822,7 +824,7 @@ class BasicChecker(_BasicChecker):
except utils.NoSuchArgumentError:
pass
else:
- if argument is astroid.Uninferable:
+ if isinstance(argument, util.UninferableBase):
return
if argument is None:
# Nothing was inferred.
diff --git a/pylint/checkers/classes/class_checker.py b/pylint/checkers/classes/class_checker.py
index f4fc2a42a..bf0ab8ba6 100644
--- a/pylint/checkers/classes/class_checker.py
+++ b/pylint/checkers/classes/class_checker.py
@@ -15,7 +15,7 @@ from re import Pattern
from typing import TYPE_CHECKING, Any, Union
import astroid
-from astroid import bases, nodes
+from astroid import bases, nodes, util
from astroid.nodes import LocalsDictNodeNG
from astroid.typing import SuccessfulInferenceResult
@@ -459,7 +459,7 @@ def _is_attribute_property(name: str, klass: nodes.ClassDef) -> bool:
return False
property_name = "builtins.property"
for attr in attributes:
- if attr is astroid.Uninferable:
+ if isinstance(attr, util.UninferableBase):
continue
try:
inferred = next(attr.infer())
@@ -1453,7 +1453,7 @@ a metaclass class method.",
for slots in node.ilookup("__slots__"):
# check if __slots__ is a valid type
- if slots is astroid.Uninferable:
+ if isinstance(slots, util.UninferableBase):
continue
if not is_iterable(slots) and not is_comprehension(slots):
self.add_message("invalid-slots", node=node)
@@ -1471,7 +1471,7 @@ a metaclass class method.",
values = [item[0] for item in slots.items]
else:
values = slots.itered()
- if values is astroid.Uninferable:
+ if isinstance(values, util.UninferableBase):
continue
for elt in values:
try:
@@ -1518,7 +1518,7 @@ a metaclass class method.",
self, elt: SuccessfulInferenceResult, node: nodes.ClassDef
) -> None:
for inferred in elt.infer():
- if inferred is astroid.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
continue
if not isinstance(inferred, nodes.Const) or not isinstance(
inferred.value, str
@@ -1623,8 +1623,7 @@ a metaclass class method.",
else:
inferred = safe_infer(node.parent.value)
if (
- isinstance(inferred, nodes.ClassDef)
- or inferred is astroid.Uninferable
+ isinstance(inferred, (nodes.ClassDef, util.UninferableBase))
or inferred is None
):
# If is uninferable, we allow it to prevent false positives
@@ -2133,7 +2132,7 @@ a metaclass class method.",
# pylint: disable = too-many-try-statements
try:
for klass in expr.expr.infer():
- if klass is astroid.Uninferable:
+ if isinstance(klass, util.UninferableBase):
continue
# The inferred klass can be super(), which was
# assigned to a variable and the `__init__`
diff --git a/pylint/checkers/classes/special_methods_checker.py b/pylint/checkers/classes/special_methods_checker.py
index fe6906265..9de5e619f 100644
--- a/pylint/checkers/classes/special_methods_checker.py
+++ b/pylint/checkers/classes/special_methods_checker.py
@@ -9,7 +9,7 @@ from __future__ import annotations
from collections.abc import Callable
import astroid
-from astroid import bases, nodes
+from astroid import bases, nodes, util
from astroid.context import InferenceContext
from astroid.typing import InferenceResult
@@ -394,7 +394,7 @@ class SpecialMethodsChecker(BaseChecker):
if isinstance(arg, nodes.Call):
arg = safe_infer(arg)
- if arg and arg is not astroid.Uninferable:
+ if arg and not isinstance(arg, util.UninferableBase):
if not check(arg):
found_error = True
break
diff --git a/pylint/checkers/dunder_methods.py b/pylint/checkers/dunder_methods.py
index 987e539aa..b66844901 100644
--- a/pylint/checkers/dunder_methods.py
+++ b/pylint/checkers/dunder_methods.py
@@ -6,7 +6,8 @@ from __future__ import annotations
from typing import TYPE_CHECKING
-from astroid import Instance, Uninferable, nodes
+from astroid import Instance, nodes
+from astroid.util import UninferableBase
from pylint.checkers import BaseChecker
from pylint.checkers.utils import safe_infer
@@ -77,7 +78,9 @@ class DunderCallChecker(BaseChecker):
)
):
inf_expr = safe_infer(node.func.expr)
- if not (inf_expr in {None, Uninferable} or isinstance(inf_expr, Instance)):
+ if not (
+ inf_expr is None or isinstance(inf_expr, (Instance, UninferableBase))
+ ):
# Skip dunder calls to non instantiated classes.
return
diff --git a/pylint/checkers/exceptions.py b/pylint/checkers/exceptions.py
index 67735b353..c2bd246d7 100644
--- a/pylint/checkers/exceptions.py
+++ b/pylint/checkers/exceptions.py
@@ -13,7 +13,7 @@ from collections.abc import Generator
from typing import TYPE_CHECKING, Any
import astroid
-from astroid import nodes, objects
+from astroid import nodes, objects, util
from astroid.context import InferenceContext
from astroid.typing import InferenceResult, SuccessfulInferenceResult
@@ -46,11 +46,11 @@ def _annotated_unpack_infer(
if isinstance(stmt, (nodes.List, nodes.Tuple)):
for elt in stmt.elts:
inferred = utils.safe_infer(elt)
- if inferred and inferred is not astroid.Uninferable:
+ if inferred and not isinstance(inferred, util.UninferableBase):
yield elt, inferred
return
for inferred in stmt.infer(context):
- if inferred is astroid.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
continue
yield stmt, inferred
@@ -344,7 +344,7 @@ class ExceptionsChecker(checkers.BaseChecker):
ExceptionRaiseRefVisitor(self, node).visit(expr)
inferred = utils.safe_infer(expr)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
return
ExceptionRaiseLeafVisitor(self, node).visit(inferred)
@@ -375,7 +375,7 @@ class ExceptionsChecker(checkers.BaseChecker):
An exception cause can be only `None` or an exception.
"""
cause = utils.safe_infer(node.cause)
- if cause in (astroid.Uninferable, None):
+ if cause is None or isinstance(cause, util.UninferableBase):
return
if isinstance(cause, nodes.Const):
@@ -441,7 +441,7 @@ class ExceptionsChecker(checkers.BaseChecker):
if isinstance(exc, nodes.Tuple):
# Check if it is a tuple of exceptions.
inferred = [utils.safe_infer(elt) for elt in exc.elts]
- if any(node is astroid.Uninferable for node in inferred):
+ if any(isinstance(node, util.UninferableBase) for node in inferred):
# Don't emit if we don't know every component.
return
if all(
diff --git a/pylint/checkers/refactoring/implicit_booleaness_checker.py b/pylint/checkers/refactoring/implicit_booleaness_checker.py
index 2ad038619..73503f8e6 100644
--- a/pylint/checkers/refactoring/implicit_booleaness_checker.py
+++ b/pylint/checkers/refactoring/implicit_booleaness_checker.py
@@ -5,7 +5,7 @@
from __future__ import annotations
import astroid
-from astroid import bases, nodes
+from astroid import bases, nodes, util
from pylint import checkers
from pylint.checkers import utils
@@ -224,7 +224,9 @@ class ImplicitBooleanessChecker(checkers.BaseChecker):
return original_comparison, suggestion, description
@staticmethod
- def base_names_of_instance(node: bases.Uninferable | bases.Instance) -> list[str]:
+ def base_names_of_instance(
+ node: util.UninferableBase | bases.Instance,
+ ) -> list[str]:
"""Return all names inherited by a class instance or those returned by a
function.
diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py
index b3e48f31e..26877ccdb 100644
--- a/pylint/checkers/refactoring/refactoring_checker.py
+++ b/pylint/checkers/refactoring/refactoring_checker.py
@@ -16,7 +16,7 @@ from typing import TYPE_CHECKING, Any, NamedTuple, Union, cast
import astroid
from astroid import bases, nodes
-from astroid.util import Uninferable
+from astroid.util import UninferableBase
from pylint import checkers
from pylint.checkers import utils
@@ -1542,7 +1542,9 @@ class RefactoringChecker(checkers.BaseTokenChecker):
return
inferred_truth_value = utils.safe_infer(truth_value, compare_constants=True)
- if inferred_truth_value is None or inferred_truth_value == astroid.Uninferable:
+ if inferred_truth_value is None or isinstance(
+ inferred_truth_value, UninferableBase
+ ):
return
truth_boolean_value = inferred_truth_value.bool_value()
@@ -1569,7 +1571,7 @@ class RefactoringChecker(checkers.BaseTokenChecker):
else:
assignees = [node.targets[0]]
values = [node.value]
- if Uninferable in (assignees, values):
+ if any(isinstance(n, UninferableBase) for n in (assignees, values)):
return
for assignee, value in zip(assignees, values):
if not isinstance(value, nodes.Call):
@@ -1921,7 +1923,11 @@ class RefactoringChecker(checkers.BaseTokenChecker):
# to infer it.
return True
exc = utils.safe_infer(node.exc)
- if exc is None or exc is astroid.Uninferable or not hasattr(exc, "pytype"):
+ if (
+ exc is None
+ or isinstance(exc, UninferableBase)
+ or not hasattr(exc, "pytype")
+ ):
return False
exc_name = exc.pytype().split(".")[-1]
handlers = utils.get_exception_handlers(node, exc_name)
diff --git a/pylint/checkers/stdlib.py b/pylint/checkers/stdlib.py
index e46b5f574..96b273c74 100644
--- a/pylint/checkers/stdlib.py
+++ b/pylint/checkers/stdlib.py
@@ -11,7 +11,7 @@ from collections.abc import Iterable
from typing import TYPE_CHECKING, Any, Dict, Set, Tuple
import astroid
-from astroid import nodes
+from astroid import nodes, util
from astroid.typing import InferenceResult
from pylint import interfaces
@@ -540,7 +540,7 @@ class StdlibChecker(DeprecatedMixin, BaseChecker):
"""Visit a Call node."""
self.check_deprecated_class_in_call(node)
for inferred in utils.infer_all(node.func):
- if inferred is astroid.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
continue
if inferred.root().name in OPEN_MODULE:
open_func_name: str | None = None
@@ -805,7 +805,7 @@ class StdlibChecker(DeprecatedMixin, BaseChecker):
call_arg: InferenceResult | None,
allow_none: bool,
) -> None:
- if call_arg in (astroid.Uninferable, None):
+ if call_arg is None or isinstance(call_arg, util.UninferableBase):
return
name = infer.qname()
@@ -818,7 +818,7 @@ class StdlibChecker(DeprecatedMixin, BaseChecker):
if emit:
self.add_message(message, node=node, args=(name, call_arg.pytype()))
else:
- self.add_message(message, node=node, args=(name, call_arg.pytype())) # type: ignore[union-attr]
+ self.add_message(message, node=node, args=(name, call_arg.pytype()))
def deprecated_methods(self) -> set[str]:
return self._deprecated_methods
diff --git a/pylint/checkers/strings.py b/pylint/checkers/strings.py
index d5be5aa53..380d87fb0 100644
--- a/pylint/checkers/strings.py
+++ b/pylint/checkers/strings.py
@@ -15,7 +15,7 @@ from collections.abc import Iterable, Sequence
from typing import TYPE_CHECKING
import astroid
-from astroid import bases, nodes
+from astroid import bases, nodes, util
from astroid.typing import SuccessfulInferenceResult
from pylint.checkers import BaseChecker, BaseRawFileChecker, BaseTokenChecker, utils
@@ -337,7 +337,7 @@ class StringFormatChecker(BaseChecker):
if (
format_type is not None
and arg_type
- and arg_type != astroid.Uninferable
+ and not isinstance(arg_type, util.UninferableBase)
and not arg_matches_format_type(arg_type, format_type)
):
self.add_message(
@@ -395,7 +395,7 @@ class StringFormatChecker(BaseChecker):
arg_type = utils.safe_infer(arg)
if (
arg_type
- and arg_type != astroid.Uninferable
+ and not isinstance(arg_type, util.UninferableBase)
and not arg_matches_format_type(arg_type, format_type)
):
self.add_message(
@@ -561,7 +561,7 @@ class StringFormatChecker(BaseChecker):
if key not in named:
continue
argname = named[key]
- if argname in (astroid.Uninferable, None):
+ if argname is None or isinstance(argname, util.UninferableBase):
continue
try:
argument = utils.safe_infer(argname)
@@ -578,7 +578,7 @@ class StringFormatChecker(BaseChecker):
previous = argument
parsed: list[tuple[bool, str]] = []
for is_attribute, specifier in specifiers:
- if previous is astroid.Uninferable:
+ if isinstance(previous, util.UninferableBase):
break
parsed.append((is_attribute, specifier))
if is_attribute:
@@ -611,7 +611,7 @@ class StringFormatChecker(BaseChecker):
warn_error = True
except astroid.InferenceError:
break
- if previous is astroid.Uninferable:
+ if isinstance(previous, util.UninferableBase):
break
else:
try:
diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py
index e40113473..8e00384d7 100644
--- a/pylint/checkers/typecheck.py
+++ b/pylint/checkers/typecheck.py
@@ -21,7 +21,7 @@ from typing import TYPE_CHECKING, Any, TypeVar, Union
import astroid
import astroid.exceptions
import astroid.helpers
-from astroid import arguments, bases, nodes
+from astroid import arguments, bases, nodes, util
from astroid.typing import InferenceResult, SuccessfulInferenceResult
from pylint.checkers import BaseChecker, utils
@@ -1079,7 +1079,7 @@ accessed. Python regular expressions are accepted.",
non_opaque_inference_results: list[SuccessfulInferenceResult] = [
owner
for owner in inferred
- if owner is not astroid.Uninferable and not isinstance(owner, nodes.Unknown)
+ if not isinstance(owner, (nodes.Unknown, util.UninferableBase))
]
if (
len(non_opaque_inference_results) != len(inferred)
@@ -1316,11 +1316,7 @@ accessed. Python regular expressions are accepted.",
expr = node.func.expr
klass = safe_infer(expr)
- if (
- klass is None
- or klass is astroid.Uninferable
- or not isinstance(klass, astroid.Instance)
- ):
+ if not isinstance(klass, astroid.Instance):
return
try:
@@ -1329,8 +1325,6 @@ accessed. Python regular expressions are accepted.",
return
for attr in attrs:
- if attr is astroid.Uninferable:
- continue
if not isinstance(attr, nodes.FunctionDef):
continue
@@ -1343,7 +1337,8 @@ accessed. Python regular expressions are accepted.",
continue
if all(
- return_node is astroid.Uninferable for return_node in call_results
+ isinstance(return_node, util.UninferableBase)
+ for return_node in call_results
):
# We were unable to infer return values of the call, skipping
continue
@@ -1694,7 +1689,7 @@ accessed. Python regular expressions are accepted.",
# that override __getitem__ and which may allow non-integer indices.
try:
methods = astroid.interpreter.dunder_lookup.lookup(parent_type, methodname)
- if methods is astroid.Uninferable:
+ if isinstance(methods, util.UninferableBase):
return None
itemmethod = methods[0]
except (
@@ -1711,7 +1706,7 @@ accessed. Python regular expressions are accepted.",
return None
index_type = safe_infer(subscript.slice)
- if index_type is None or index_type is astroid.Uninferable:
+ if index_type is None or isinstance(index_type, util.UninferableBase):
return None
# Constants must be of type int
if isinstance(index_type, nodes.Const):
@@ -1775,7 +1770,7 @@ accessed. Python regular expressions are accepted.",
continue
index_type = safe_infer(index)
- if index_type is None or index_type is astroid.Uninferable:
+ if index_type is None or isinstance(index_type, util.UninferableBase):
continue
# Constants must be of type int or None
@@ -1807,7 +1802,7 @@ accessed. Python regular expressions are accepted.",
parent = node.parent
if isinstance(parent, nodes.Subscript):
inferred = safe_infer(parent.value)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
# Don't know what this is
return
known_objects = (
@@ -1836,7 +1831,7 @@ accessed. Python regular expressions are accepted.",
for ctx_mgr, _ in node.items:
context = astroid.context.InferenceContext()
inferred = safe_infer(ctx_mgr, context=context)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
continue
if isinstance(inferred, astroid.bases.Generator):
@@ -2041,7 +2036,7 @@ accessed. Python regular expressions are accepted.",
if is_comprehension(node):
return
inferred = safe_infer(node)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
return
if not supports_membership_test(inferred):
self.add_message(
@@ -2124,7 +2119,7 @@ accessed. Python regular expressions are accepted.",
inferred = safe_infer(node.value)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
return
if getattr(inferred, "decorators", None):
@@ -2247,7 +2242,7 @@ class IterableChecker(BaseChecker):
if isinstance(node, nodes.DictComp):
return
inferred = safe_infer(node)
- if inferred is None or inferred is astroid.Uninferable:
+ if inferred is None or isinstance(inferred, util.UninferableBase):
return
if not is_mapping(inferred):
self.add_message("not-a-mapping", args=node.as_string(), node=node)
diff --git a/pylint/checkers/utils.py b/pylint/checkers/utils.py
index 6c35dc65f..9f1ce93fe 100644
--- a/pylint/checkers/utils.py
+++ b/pylint/checkers/utils.py
@@ -21,7 +21,7 @@ from typing import TYPE_CHECKING, Callable, TypeVar
import _string
import astroid.objects
-from astroid import TooManyLevelsError, nodes
+from astroid import TooManyLevelsError, nodes, util
from astroid.context import InferenceContext
from astroid.exceptions import AstroidError
from astroid.nodes._base_nodes import ImportNode
@@ -885,7 +885,7 @@ def decorated_with(
if any(
i.name in qnames or i.qname() in qnames
for i in decorator_node.infer()
- if i is not None and i != astroid.Uninferable
+ if i is not None and not isinstance(i, util.UninferableBase)
):
return True
except astroid.InferenceError:
@@ -936,11 +936,10 @@ def uninferable_final_decorators(
decorator, "attrname", None
) == "final"
- if (is_from_import or is_import) and safe_infer(decorator) in [
- astroid.Uninferable,
- None,
- ]:
- decorators.append(decorator)
+ if is_from_import or is_import:
+ inferred = safe_infer(decorator)
+ if inferred is None or isinstance(inferred, util.UninferableBase):
+ decorators.append(decorator)
return decorators
@@ -1373,7 +1372,7 @@ def safe_infer(
except Exception as e: # pragma: no cover
raise AstroidError from e
- if value is not astroid.Uninferable:
+ if not isinstance(value, util.UninferableBase):
inferred_types.add(_get_python_type_of_node(value))
# pylint: disable = too-many-try-statements
@@ -1458,7 +1457,7 @@ def node_type(node: nodes.NodeNG) -> SuccessfulInferenceResult | None:
types: set[SuccessfulInferenceResult] = set()
try:
for var_type in node.infer():
- if var_type == astroid.Uninferable or is_none(var_type):
+ if isinstance(var_type, util.UninferableBase) or is_none(var_type):
continue
types.add(var_type)
if len(types) > 1:
@@ -2058,7 +2057,7 @@ def is_hashable(node: nodes.NodeNG) -> bool:
# pylint: disable = too-many-try-statements
try:
for inferred in node.infer():
- if inferred is astroid.Uninferable or isinstance(inferred, nodes.ClassDef):
+ if isinstance(inferred, (nodes.ClassDef, util.UninferableBase)):
return True
if not hasattr(inferred, "igetattr"):
return True
diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py
index bc4f887dc..734231103 100644
--- a/pylint/checkers/variables.py
+++ b/pylint/checkers/variables.py
@@ -19,7 +19,7 @@ from functools import lru_cache
from typing import TYPE_CHECKING, Any, NamedTuple
import astroid
-from astroid import bases, extract_node, nodes
+from astroid import bases, extract_node, nodes, util
from astroid.nodes import _base_nodes
from astroid.typing import InferenceResult
@@ -2866,7 +2866,7 @@ class VariablesChecker(BaseChecker):
return
if utils.is_comprehension(node):
return
- if inferred is astroid.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
return
if (
isinstance(inferred.parent, nodes.Arguments)
@@ -2969,7 +2969,7 @@ class VariablesChecker(BaseChecker):
self, node: nodes.Module, not_consumed: dict[str, list[nodes.NodeNG]]
) -> None:
assigned = next(node.igetattr("__all__"))
- if assigned is astroid.Uninferable:
+ if isinstance(assigned, util.UninferableBase):
return
if assigned.pytype() not in {"builtins.list", "builtins.tuple"}:
line, col = assigned.tolineno, assigned.col_offset
@@ -2980,7 +2980,7 @@ class VariablesChecker(BaseChecker):
elt_name = next(elt.infer())
except astroid.InferenceError:
continue
- if elt_name is astroid.Uninferable:
+ if isinstance(elt_name, util.UninferableBase):
continue
if not elt_name.parent:
continue
diff --git a/pylint/extensions/_check_docs_utils.py b/pylint/extensions/_check_docs_utils.py
index 811bd67b5..33edc95e9 100644
--- a/pylint/extensions/_check_docs_utils.py
+++ b/pylint/extensions/_check_docs_utils.py
@@ -10,7 +10,7 @@ import re
import astroid
from astroid import nodes
-from astroid.util import Uninferable
+from astroid.util import UninferableBase
from pylint.checkers import utils
@@ -89,7 +89,7 @@ def returns_something(return_node: nodes.Return) -> bool:
return not (isinstance(returns, nodes.Const) and returns.value is None)
-def _get_raise_target(node: nodes.NodeNG) -> nodes.NodeNG | Uninferable | None:
+def _get_raise_target(node: nodes.NodeNG) -> nodes.NodeNG | UninferableBase | None:
if isinstance(node.exc, nodes.Call):
func = node.exc.func
if isinstance(func, (nodes.Name, nodes.Attribute)):
@@ -126,7 +126,7 @@ def possible_exc_types(node: nodes.NodeNG) -> set[nodes.ClassDef]:
if handler and handler.type:
try:
for exception in astroid.unpack_infer(handler.type):
- if exception is not astroid.Uninferable:
+ if not isinstance(exception, UninferableBase):
exceptions.append(exception)
except astroid.InferenceError:
pass
diff --git a/pylint/extensions/overlapping_exceptions.py b/pylint/extensions/overlapping_exceptions.py
index 22af25bc3..93d225137 100644
--- a/pylint/extensions/overlapping_exceptions.py
+++ b/pylint/extensions/overlapping_exceptions.py
@@ -9,7 +9,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Any
import astroid
-from astroid import nodes
+from astroid import nodes, util
from pylint import checkers
from pylint.checkers import utils
@@ -51,7 +51,7 @@ class OverlappingExceptionsChecker(checkers.BaseChecker):
handled_in_clause: list[tuple[Any, Any]] = []
for part, exc in excs:
- if exc is astroid.Uninferable:
+ if isinstance(exc, util.UninferableBase):
continue
if isinstance(exc, astroid.Instance) and utils.inherit_from_std_ex(exc):
exc = exc._proxied
diff --git a/pylint/pyreverse/diagrams.py b/pylint/pyreverse/diagrams.py
index c3bf8e0f0..4437d3c4e 100644
--- a/pylint/pyreverse/diagrams.py
+++ b/pylint/pyreverse/diagrams.py
@@ -10,7 +10,7 @@ from collections.abc import Iterable
from typing import Any
import astroid
-from astroid import nodes
+from astroid import nodes, util
from pylint.checkers.utils import decorated_with_property
from pylint.pyreverse.utils import FilterMixIn, is_interface
@@ -233,7 +233,7 @@ class ClassDiagram(Figure, FilterMixIn):
def assign_association_relationship(
self, value: astroid.NodeNG, obj: ClassEntity, name: str, type_relationship: str
) -> None:
- if value is astroid.Uninferable:
+ if isinstance(value, util.UninferableBase):
return
if isinstance(value, astroid.Instance):
value = value._proxied
diff --git a/pylint/pyreverse/inspector.py b/pylint/pyreverse/inspector.py
index cf22d7eb1..523ff8171 100644
--- a/pylint/pyreverse/inspector.py
+++ b/pylint/pyreverse/inspector.py
@@ -18,7 +18,7 @@ from collections.abc import Generator
from typing import Any, Callable, Optional
import astroid
-from astroid import nodes
+from astroid import nodes, util
from pylint import constants
from pylint.pyreverse import utils
@@ -50,7 +50,7 @@ def interfaces(node: nodes.ClassDef) -> Generator[Any, None, None]:
found = set()
missing = False
for iface in nodes.unpack_infer(implements):
- if iface is astroid.Uninferable:
+ if isinstance(iface, util.UninferableBase):
missing = True
continue
if iface not in found: