summaryrefslogtreecommitdiff
path: root/astroid/brain
diff options
context:
space:
mode:
authorNick Drozd <nicholasdrozd@gmail.com>2022-11-22 09:14:21 -0600
committerGitHub <noreply@github.com>2022-11-22 16:14:21 +0100
commit7a0b5626ae7011c682a1fdee2362823cb36adc69 (patch)
tree36afd4cf0882a6eb65730e9182d676c8321d998c /astroid/brain
parent595c8bb416153ef3470b6d2ec41de0316fd5a769 (diff)
downloadastroid-git-7a0b5626ae7011c682a1fdee2362823cb36adc69.tar.gz
Add some InferenceContext annotations (#1883)
Diffstat (limited to 'astroid/brain')
-rw-r--r--astroid/brain/brain_argparse.py5
-rw-r--r--astroid/brain/brain_builtin_inference.py36
-rw-r--r--astroid/brain/brain_collections.py5
-rw-r--r--astroid/brain/brain_functools.py6
-rw-r--r--astroid/brain/brain_namedtuple_enum.py4
-rw-r--r--astroid/brain/brain_numpy_ndarray.py5
-rw-r--r--astroid/brain/brain_numpy_utils.py3
-rw-r--r--astroid/brain/brain_random.py5
-rw-r--r--astroid/brain/brain_type.py7
-rw-r--r--astroid/brain/brain_typing.py4
10 files changed, 47 insertions, 33 deletions
diff --git a/astroid/brain/brain_argparse.py b/astroid/brain/brain_argparse.py
index 0457db66..28a5e859 100644
--- a/astroid/brain/brain_argparse.py
+++ b/astroid/brain/brain_argparse.py
@@ -2,12 +2,15 @@
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt
+from __future__ import annotations
+
from astroid import arguments, inference_tip, nodes
+from astroid.context import InferenceContext
from astroid.exceptions import UseInferenceDefault
from astroid.manager import AstroidManager
-def infer_namespace(node, context=None):
+def infer_namespace(node, context: InferenceContext | None = None):
callsite = arguments.CallSite.from_call(node, context=context)
if not callsite.keyword_arguments:
# Cannot make sense of it.
diff --git a/astroid/brain/brain_builtin_inference.py b/astroid/brain/brain_builtin_inference.py
index 86785e0f..e2455e54 100644
--- a/astroid/brain/brain_builtin_inference.py
+++ b/astroid/brain/brain_builtin_inference.py
@@ -171,7 +171,7 @@ def register_builtin_transform(transform, builtin_name):
an optional context.
"""
- def _transform_wrapper(node, context=None):
+ def _transform_wrapper(node, context: InferenceContext | None = None):
result = transform(node, context=context)
if result:
if not result.parent:
@@ -336,7 +336,7 @@ def _get_elts(arg, context):
return items
-def infer_dict(node, context=None):
+def infer_dict(node, context: InferenceContext | None = None):
"""Try to infer a dict call to a Dict node.
The function treats the following cases:
@@ -379,7 +379,7 @@ def infer_dict(node, context=None):
return value
-def infer_super(node, context=None):
+def infer_super(node, context: InferenceContext | None = None):
"""Understand super calls.
There are some restrictions for what can be understood:
@@ -458,7 +458,7 @@ def _infer_getattr_args(node, context):
return obj, attr.value
-def infer_getattr(node, context=None):
+def infer_getattr(node, context: InferenceContext | None = None):
"""Understand getattr calls
If one of the arguments is an Uninferable object, then the
@@ -486,7 +486,7 @@ def infer_getattr(node, context=None):
raise UseInferenceDefault
-def infer_hasattr(node, context=None):
+def infer_hasattr(node, context: InferenceContext | None = None):
"""Understand hasattr calls
This always guarantees three possible outcomes for calling
@@ -513,7 +513,7 @@ def infer_hasattr(node, context=None):
return nodes.Const(True)
-def infer_callable(node, context=None):
+def infer_callable(node, context: InferenceContext | None = None):
"""Understand callable calls
This follows Python's semantics, where an object
@@ -571,7 +571,7 @@ def infer_property(
return prop_func
-def infer_bool(node, context=None):
+def infer_bool(node, context: InferenceContext | None = None):
"""Understand bool calls."""
if len(node.args) > 1:
# Invalid bool call.
@@ -594,7 +594,7 @@ def infer_bool(node, context=None):
return nodes.Const(bool_value)
-def infer_type(node, context=None):
+def infer_type(node, context: InferenceContext | None = None):
"""Understand the one-argument form of *type*."""
if len(node.args) != 1:
raise UseInferenceDefault
@@ -602,7 +602,7 @@ def infer_type(node, context=None):
return helpers.object_type(node.args[0], context)
-def infer_slice(node, context=None):
+def infer_slice(node, context: InferenceContext | None = None):
"""Understand `slice` calls."""
args = node.args
if not 0 < len(args) <= 3:
@@ -629,7 +629,7 @@ def infer_slice(node, context=None):
return slice_node
-def _infer_object__new__decorator(node, context=None):
+def _infer_object__new__decorator(node, context: InferenceContext | None = None):
# Instantiate class immediately
# since that's what @object.__new__ does
return iter((node.instantiate_class(),))
@@ -650,7 +650,7 @@ def _infer_object__new__decorator_check(node) -> bool:
return False
-def infer_issubclass(callnode, context=None):
+def infer_issubclass(callnode, context: InferenceContext | None = None):
"""Infer issubclass() calls
:param nodes.Call callnode: an `issubclass` call
@@ -693,12 +693,10 @@ def infer_issubclass(callnode, context=None):
return nodes.Const(issubclass_bool)
-def infer_isinstance(callnode, context=None):
+def infer_isinstance(callnode, context: InferenceContext | None = None):
"""Infer isinstance calls
:param nodes.Call callnode: an isinstance call
- :param InferenceContext context: context for call
- (currently unused but is a common interface for inference)
:rtype nodes.Const: Boolean Const value of isinstance call
:raises UseInferenceDefault: If the node cannot be inferred
@@ -732,7 +730,7 @@ def infer_isinstance(callnode, context=None):
return nodes.Const(isinstance_bool)
-def _class_or_tuple_to_container(node, context=None):
+def _class_or_tuple_to_container(node, context: InferenceContext | None = None):
# Move inferences results into container
# to simplify later logic
# raises InferenceError if any of the inferences fall through
@@ -757,7 +755,7 @@ def _class_or_tuple_to_container(node, context=None):
return class_container
-def infer_len(node, context=None):
+def infer_len(node, context: InferenceContext | None = None):
"""Infer length calls
:param nodes.Call node: len call to infer
@@ -780,7 +778,7 @@ def infer_len(node, context=None):
raise UseInferenceDefault(str(exc)) from exc
-def infer_str(node, context=None):
+def infer_str(node, context: InferenceContext | None = None):
"""Infer str() calls
:param nodes.Call node: str() call to infer
@@ -796,7 +794,7 @@ def infer_str(node, context=None):
raise UseInferenceDefault(str(exc)) from exc
-def infer_int(node, context=None):
+def infer_int(node, context: InferenceContext | None = None):
"""Infer int() calls
:param nodes.Call node: int() call to infer
@@ -828,7 +826,7 @@ def infer_int(node, context=None):
return nodes.Const(0)
-def infer_dict_fromkeys(node, context=None):
+def infer_dict_fromkeys(node, context: InferenceContext | None = None):
"""Infer dict.fromkeys
:param nodes.Call node: dict.fromkeys() call to infer
diff --git a/astroid/brain/brain_collections.py b/astroid/brain/brain_collections.py
index 43304ecd..123096a2 100644
--- a/astroid/brain/brain_collections.py
+++ b/astroid/brain/brain_collections.py
@@ -2,9 +2,12 @@
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt
+from __future__ import annotations
+
from astroid.brain.helpers import register_module_extender
from astroid.builder import extract_node, parse
from astroid.const import PY39_PLUS
+from astroid.context import InferenceContext
from astroid.exceptions import AttributeInferenceError
from astroid.manager import AstroidManager
from astroid.nodes.scoped_nodes import ClassDef
@@ -106,7 +109,7 @@ def __class_getitem__(cls, item):
"""
-def easy_class_getitem_inference(node, context=None):
+def easy_class_getitem_inference(node, context: InferenceContext | None = None):
# Here __class_getitem__ exists but is quite a mess to infer thus
# put an easy inference tip
func_to_add = extract_node(CLASS_GET_ITEM_TEMPLATE)
diff --git a/astroid/brain/brain_functools.py b/astroid/brain/brain_functools.py
index 6c99c515..bff04e98 100644
--- a/astroid/brain/brain_functools.py
+++ b/astroid/brain/brain_functools.py
@@ -44,7 +44,9 @@ class LruWrappedModel(objectmodel.FunctionModel):
)
class CacheInfoBoundMethod(BoundMethod):
- def infer_call_result(self, caller, context=None):
+ def infer_call_result(
+ self, caller, context: InferenceContext | None = None
+ ):
yield helpers.safe_infer(cache_info)
return CacheInfoBoundMethod(proxy=self._instance, bound=self._instance)
@@ -55,7 +57,7 @@ class LruWrappedModel(objectmodel.FunctionModel):
return BoundMethod(proxy=node, bound=self._instance.parent.scope())
-def _transform_lru_cache(node, context=None) -> None:
+def _transform_lru_cache(node, context: InferenceContext | None = None) -> None:
# TODO: this is not ideal, since the node should be immutable,
# but due to https://github.com/PyCQA/astroid/issues/354,
# there's not much we can do now.
diff --git a/astroid/brain/brain_namedtuple_enum.py b/astroid/brain/brain_namedtuple_enum.py
index d96a6d86..53d89bcf 100644
--- a/astroid/brain/brain_namedtuple_enum.py
+++ b/astroid/brain/brain_namedtuple_enum.py
@@ -464,7 +464,7 @@ def infer_enum_class(node: nodes.ClassDef) -> nodes.ClassDef:
return node
-def infer_typing_namedtuple_class(class_node, context=None):
+def infer_typing_namedtuple_class(class_node, context: InferenceContext | None = None):
"""Infer a subclass of typing.NamedTuple"""
# Check if it has the corresponding bases
annassigns_fields = [
@@ -497,7 +497,7 @@ def infer_typing_namedtuple_class(class_node, context=None):
return iter((generated_class_node,))
-def infer_typing_namedtuple_function(node, context=None):
+def infer_typing_namedtuple_function(node, context: InferenceContext | None = None):
"""
Starting with python3.9, NamedTuple is a function of the typing module.
The class NamedTuple is build dynamically through a call to `type` during
diff --git a/astroid/brain/brain_numpy_ndarray.py b/astroid/brain/brain_numpy_ndarray.py
index e2429985..48db84eb 100644
--- a/astroid/brain/brain_numpy_ndarray.py
+++ b/astroid/brain/brain_numpy_ndarray.py
@@ -3,14 +3,17 @@
# Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt
"""Astroid hooks for numpy ndarray class."""
+from __future__ import annotations
+
from astroid.brain.brain_numpy_utils import numpy_supports_type_hints
from astroid.builder import extract_node
+from astroid.context import InferenceContext
from astroid.inference_tip import inference_tip
from astroid.manager import AstroidManager
from astroid.nodes.node_classes import Attribute
-def infer_numpy_ndarray(node, context=None):
+def infer_numpy_ndarray(node, context: InferenceContext | None = None):
ndarray = """
class ndarray(object):
def __init__(self, shape, dtype=float, buffer=None, offset=0,
diff --git a/astroid/brain/brain_numpy_utils.py b/astroid/brain/brain_numpy_utils.py
index 91881955..fee62e18 100644
--- a/astroid/brain/brain_numpy_utils.py
+++ b/astroid/brain/brain_numpy_utils.py
@@ -7,6 +7,7 @@
from __future__ import annotations
from astroid.builder import extract_node
+from astroid.context import InferenceContext
from astroid.nodes.node_classes import Attribute, Import, Name, NodeNG
# Class subscript is available in numpy starting with version 1.20.0
@@ -34,7 +35,7 @@ def _get_numpy_version() -> tuple[str, str, str]:
return ("0", "0", "0")
-def infer_numpy_member(src, node, context=None):
+def infer_numpy_member(src, node, context: InferenceContext | None = None):
node = extract_node(src)
return node.infer(context=context)
diff --git a/astroid/brain/brain_random.py b/astroid/brain/brain_random.py
index d2cd271c..ef3beb7e 100644
--- a/astroid/brain/brain_random.py
+++ b/astroid/brain/brain_random.py
@@ -2,9 +2,12 @@
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt
+from __future__ import annotations
+
import random
from astroid import helpers
+from astroid.context import InferenceContext
from astroid.exceptions import UseInferenceDefault
from astroid.inference_tip import inference_tip
from astroid.manager import AstroidManager
@@ -38,7 +41,7 @@ def _clone_node_with_lineno(node, parent, lineno):
return new_node
-def infer_random_sample(node, context=None):
+def infer_random_sample(node, context: InferenceContext | None = None):
if len(node.args) != 2:
raise UseInferenceDefault
diff --git a/astroid/brain/brain_type.py b/astroid/brain/brain_type.py
index eb8747ad..e261d081 100644
--- a/astroid/brain/brain_type.py
+++ b/astroid/brain/brain_type.py
@@ -20,8 +20,11 @@ Doing this type[int] is allowed whereas str[int] is not.
Thanks to Lukasz Langa for fruitful discussion.
"""
+from __future__ import annotations
+
from astroid import extract_node, inference_tip, nodes
from astroid.const import PY39_PLUS
+from astroid.context import InferenceContext
from astroid.exceptions import UseInferenceDefault
from astroid.manager import AstroidManager
@@ -39,14 +42,12 @@ def _looks_like_type_subscript(node) -> bool:
return False
-def infer_type_sub(node, context=None):
+def infer_type_sub(node, context: InferenceContext | None = None):
"""
Infer a type[...] subscript
:param node: node to infer
:type node: astroid.nodes.node_classes.NodeNG
- :param context: inference context
- :type context: astroid.context.InferenceContext
:return: the inferred node
:rtype: nodes.NodeNG
"""
diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py
index e1aa13a1..ea22100c 100644
--- a/astroid/brain/brain_typing.py
+++ b/astroid/brain/brain_typing.py
@@ -278,7 +278,7 @@ def infer_typing_alias(
try:
res = next(node.args[0].infer(context=ctx))
except StopIteration as e:
- raise InferenceError(node=node.args[0], context=context) from e
+ raise InferenceError(node=node.args[0], context=ctx) from e
assign_name = node.parent.targets[0]
@@ -359,7 +359,7 @@ def infer_special_alias(
try:
res = next(node.args[0].infer(context=ctx))
except StopIteration as e:
- raise InferenceError(node=node.args[0], context=context) from e
+ raise InferenceError(node=node.args[0], context=ctx) from e
assign_name = node.parent.targets[0]
class_def = ClassDef(