summaryrefslogtreecommitdiff
path: root/astroid/brain
diff options
context:
space:
mode:
authorDaniël van Noord <13665637+DanielNoord@users.noreply.github.com>2023-02-05 21:44:14 +0100
committerDaniël van Noord <13665637+DanielNoord@users.noreply.github.com>2023-02-05 21:54:08 +0100
commiteb711d20a4ed5f9e8ff8e7ad797d27adc43d8ccd (patch)
tree114c87635ec1c898b862271faaea2ac52441f63d /astroid/brain
parentbcaecce5634a30313e574deae101ee017ffeff17 (diff)
downloadastroid-git-eb711d20a4ed5f9e8ff8e7ad797d27adc43d8ccd.tar.gz
Create ``UninferableBase``
Diffstat (limited to 'astroid/brain')
-rw-r--r--astroid/brain/brain_builtin_inference.py32
-rw-r--r--astroid/brain/brain_dataclasses.py6
-rw-r--r--astroid/brain/brain_functools.py4
-rw-r--r--astroid/brain/brain_namedtuple_enum.py4
-rw-r--r--astroid/brain/brain_typing.py3
5 files changed, 25 insertions, 24 deletions
diff --git a/astroid/brain/brain_builtin_inference.py b/astroid/brain/brain_builtin_inference.py
index b51d63a5..764ea3d6 100644
--- a/astroid/brain/brain_builtin_inference.py
+++ b/astroid/brain/brain_builtin_inference.py
@@ -209,10 +209,10 @@ def _container_generic_inference(node, context, node_type, transform):
inferred = next(arg.infer(context=context))
except (InferenceError, StopIteration) as exc:
raise UseInferenceDefault from exc
- if inferred is util.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
raise UseInferenceDefault
transformed = transform(inferred)
- if not transformed or transformed is util.Uninferable:
+ if not transformed or isinstance(transformed, util.UninferableBase):
raise UseInferenceDefault
return transformed
@@ -423,7 +423,9 @@ def infer_super(node, context: InferenceContext | None = None):
except (InferenceError, StopIteration) as exc:
raise UseInferenceDefault from exc
- if mro_pointer is util.Uninferable or mro_type is util.Uninferable:
+ if isinstance(mro_pointer, util.UninferableBase) or isinstance(
+ mro_type, util.UninferableBase
+ ):
# No way we could understand this.
raise UseInferenceDefault
@@ -445,7 +447,7 @@ def _infer_getattr_args(node, context):
except (InferenceError, StopIteration) as exc:
raise UseInferenceDefault from exc
- if obj is util.Uninferable or attr is util.Uninferable:
+ if isinstance(obj, util.UninferableBase) or isinstance(attr, util.UninferableBase):
# If one of the arguments is something we can't infer,
# then also make the result of the getattr call something
# which is unknown.
@@ -467,8 +469,8 @@ def infer_getattr(node, context: InferenceContext | None = None):
"""
obj, attr = _infer_getattr_args(node, context)
if (
- obj is util.Uninferable
- or attr is util.Uninferable
+ isinstance(obj, util.UninferableBase)
+ or isinstance(attr, util.UninferableBase)
or not hasattr(obj, "igetattr")
):
return util.Uninferable
@@ -498,8 +500,8 @@ def infer_hasattr(node, context: InferenceContext | None = None):
try:
obj, attr = _infer_getattr_args(node, context)
if (
- obj is util.Uninferable
- or attr is util.Uninferable
+ isinstance(obj, util.UninferableBase)
+ or isinstance(attr, util.UninferableBase)
or not hasattr(obj, "getattr")
):
return util.Uninferable
@@ -530,7 +532,7 @@ def infer_callable(node, context: InferenceContext | None = None):
inferred = next(argument.infer(context=context))
except (InferenceError, StopIteration):
return util.Uninferable
- if inferred is util.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
return util.Uninferable
return nodes.Const(inferred.callable())
@@ -585,11 +587,11 @@ def infer_bool(node, context: InferenceContext | None = None):
inferred = next(argument.infer(context=context))
except (InferenceError, StopIteration):
return util.Uninferable
- if inferred is util.Uninferable:
+ if isinstance(inferred, util.UninferableBase):
return util.Uninferable
bool_value = inferred.bool_value(context=context)
- if bool_value is util.Uninferable:
+ if isinstance(bool_value, util.UninferableBase):
return util.Uninferable
return nodes.Const(bool_value)
@@ -611,7 +613,7 @@ def infer_slice(node, context: InferenceContext | None = None):
infer_func = partial(helpers.safe_infer, context=context)
args = [infer_func(arg) for arg in args]
for arg in args:
- if not arg or arg is util.Uninferable:
+ if not arg or isinstance(arg, util.UninferableBase):
raise UseInferenceDefault
if not isinstance(arg, nodes.Const):
raise UseInferenceDefault
@@ -725,7 +727,7 @@ def infer_isinstance(callnode, context: InferenceContext | None = None):
raise UseInferenceDefault("TypeError: " + str(exc)) from exc
except MroError as exc:
raise UseInferenceDefault from exc
- if isinstance_bool is util.Uninferable:
+ if isinstance(isinstance_bool, util.UninferableBase):
raise UseInferenceDefault
return nodes.Const(isinstance_bool)
@@ -811,7 +813,7 @@ def infer_int(node, context: InferenceContext | None = None):
except (InferenceError, StopIteration) as exc:
raise UseInferenceDefault(str(exc)) from exc
- if first_value is util.Uninferable:
+ if isinstance(first_value, util.UninferableBase):
raise UseInferenceDefault
if isinstance(first_value, nodes.Const) and isinstance(
@@ -924,7 +926,7 @@ def _is_str_format_call(node: nodes.Call) -> bool:
def _infer_str_format_call(
node: nodes.Call, context: InferenceContext | None = None
-) -> Iterator[nodes.Const | type[util.Uninferable]]:
+) -> Iterator[nodes.Const | util.UninferableBase]:
"""Return a Const node based on the template and passed arguments."""
call = arguments.CallSite.from_call(node, context=context)
if isinstance(node.func.expr, nodes.Name):
diff --git a/astroid/brain/brain_dataclasses.py b/astroid/brain/brain_dataclasses.py
index a2e7adfa..1397ed14 100644
--- a/astroid/brain/brain_dataclasses.py
+++ b/astroid/brain/brain_dataclasses.py
@@ -25,7 +25,7 @@ from astroid.exceptions import AstroidSyntaxError, InferenceError, UseInferenceD
from astroid.inference_tip import inference_tip
from astroid.manager import AstroidManager
from astroid.typing import InferenceResult
-from astroid.util import Uninferable
+from astroid.util import Uninferable, UninferableBase
if sys.version_info >= (3, 8):
from typing import Literal
@@ -446,7 +446,7 @@ def _looks_like_dataclass_decorator(
except (InferenceError, StopIteration):
inferred = Uninferable
- if inferred is Uninferable:
+ if isinstance(inferred, UninferableBase):
if isinstance(node, nodes.Name):
return node.name in decorator_names
if isinstance(node, nodes.Attribute):
@@ -594,7 +594,7 @@ _INFERABLE_TYPING_TYPES = frozenset(
def _infer_instance_from_annotation(
node: nodes.NodeNG, ctx: context.InferenceContext | None = None
-) -> Iterator[type[Uninferable] | bases.Instance]:
+) -> Iterator[UninferableBase | bases.Instance]:
"""Infer an instance corresponding to the type annotation represented by node.
Currently has limited support for the typing module.
diff --git a/astroid/brain/brain_functools.py b/astroid/brain/brain_functools.py
index ffdbc888..f6a9830d 100644
--- a/astroid/brain/brain_functools.py
+++ b/astroid/brain/brain_functools.py
@@ -18,7 +18,7 @@ from astroid.interpreter import objectmodel
from astroid.manager import AstroidManager
from astroid.nodes.node_classes import AssignName, Attribute, Call, Name
from astroid.nodes.scoped_nodes import FunctionDef
-from astroid.util import Uninferable
+from astroid.util import UninferableBase
LRU_CACHE = "functools.lru_cache"
@@ -84,7 +84,7 @@ def _functools_partial_inference(
inferred_wrapped_function = next(partial_function.infer(context=context))
except (InferenceError, StopIteration) as exc:
raise UseInferenceDefault from exc
- if inferred_wrapped_function is Uninferable:
+ if isinstance(inferred_wrapped_function, UninferableBase):
raise UseInferenceDefault("Cannot infer the wrapped function")
if not isinstance(inferred_wrapped_function, FunctionDef):
raise UseInferenceDefault("The wrapped function is not a function")
diff --git a/astroid/brain/brain_namedtuple_enum.py b/astroid/brain/brain_namedtuple_enum.py
index f9141629..36b70361 100644
--- a/astroid/brain/brain_namedtuple_enum.py
+++ b/astroid/brain/brain_namedtuple_enum.py
@@ -52,13 +52,13 @@ TYPING_NAMEDTUPLE_BASENAMES: Final = {
def _infer_first(node, context):
- if node is util.Uninferable:
+ if isinstance(node, util.UninferableBase):
raise UseInferenceDefault
try:
value = next(node.infer(context=context))
except StopIteration as exc:
raise InferenceError from exc
- if value is util.Uninferable:
+ if isinstance(value, util.UninferableBase):
raise UseInferenceDefault()
return value
diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py
index b11bfa19..e0a9dfd1 100644
--- a/astroid/brain/brain_typing.py
+++ b/astroid/brain/brain_typing.py
@@ -33,7 +33,6 @@ from astroid.nodes.node_classes import (
Tuple,
)
from astroid.nodes.scoped_nodes import ClassDef, FunctionDef
-from astroid.util import Uninferable
if sys.version_info >= (3, 8):
from typing import Final
@@ -297,7 +296,7 @@ def infer_typing_alias(
col_offset=assign_name.col_offset,
parent=node.parent,
)
- if res != Uninferable and isinstance(res, ClassDef):
+ if isinstance(res, ClassDef):
# Only add `res` as base if it's a `ClassDef`
# This isn't the case for `typing.Pattern` and `typing.Match`
class_def.postinit(bases=[res], body=[], decorators=None)