diff options
author | Daniël van Noord <13665637+DanielNoord@users.noreply.github.com> | 2023-02-05 21:44:14 +0100 |
---|---|---|
committer | Daniël van Noord <13665637+DanielNoord@users.noreply.github.com> | 2023-02-05 21:54:08 +0100 |
commit | eb711d20a4ed5f9e8ff8e7ad797d27adc43d8ccd (patch) | |
tree | 114c87635ec1c898b862271faaea2ac52441f63d /astroid/brain | |
parent | bcaecce5634a30313e574deae101ee017ffeff17 (diff) | |
download | astroid-git-eb711d20a4ed5f9e8ff8e7ad797d27adc43d8ccd.tar.gz |
Create ``UninferableBase``
Diffstat (limited to 'astroid/brain')
-rw-r--r-- | astroid/brain/brain_builtin_inference.py | 32 | ||||
-rw-r--r-- | astroid/brain/brain_dataclasses.py | 6 | ||||
-rw-r--r-- | astroid/brain/brain_functools.py | 4 | ||||
-rw-r--r-- | astroid/brain/brain_namedtuple_enum.py | 4 | ||||
-rw-r--r-- | astroid/brain/brain_typing.py | 3 |
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) |