Skip to content

Commit fb238f1

Browse files
committed
Fix some typing in helpers.py
1 parent c792bc2 commit fb238f1

File tree

2 files changed

+28
-28
lines changed

2 files changed

+28
-28
lines changed

astroid/brain/brain_builtin_inference.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
)
2323
from astroid.manager import AstroidManager
2424
from astroid.nodes import scoped_nodes
25+
from astroid.typing import InferenceResult
2526

2627
OBJECT_DUNDER_NEW = "object.__new__"
2728

@@ -707,12 +708,12 @@ def infer_issubclass(callnode, context: InferenceContext | None = None):
707708
return nodes.Const(issubclass_bool)
708709

709710

710-
def infer_isinstance(callnode, context: InferenceContext | None = None):
711+
def infer_isinstance(
712+
callnode: nodes.Call, context: InferenceContext | None = None
713+
) -> nodes.Const:
711714
"""Infer isinstance calls.
712715
713716
:param nodes.Call callnode: an isinstance call
714-
:rtype nodes.Const: Boolean Const value of isinstance call
715-
716717
:raises UseInferenceDefault: If the node cannot be inferred
717718
"""
718719
call = arguments.CallSite.from_call(callnode, context=context)
@@ -744,7 +745,9 @@ def infer_isinstance(callnode, context: InferenceContext | None = None):
744745
return nodes.Const(isinstance_bool)
745746

746747

747-
def _class_or_tuple_to_container(node, context: InferenceContext | None = None):
748+
def _class_or_tuple_to_container(
749+
node: InferenceResult, context: InferenceContext | None = None
750+
) -> list[InferenceResult]:
748751
# Move inferences results into container
749752
# to simplify later logic
750753
# raises InferenceError if any of the inferences fall through
@@ -761,9 +764,6 @@ def _class_or_tuple_to_container(node, context: InferenceContext | None = None):
761764
]
762765
except StopIteration as e:
763766
raise InferenceError(node=node, context=context) from e
764-
class_container = [
765-
klass_node for klass_node in class_container if klass_node is not None
766-
]
767767
else:
768768
class_container = [node_infer]
769769
return class_container

astroid/helpers.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ def _build_proxy_class(cls_name: str, builtins: nodes.Module) -> nodes.ClassDef:
2828

2929

3030
def _function_type(
31-
function: nodes.Lambda | bases.UnboundMethod, builtins: nodes.Module
31+
function: nodes.Lambda | nodes.FunctionDef | bases.UnboundMethod,
32+
builtins: nodes.Module,
3233
) -> nodes.ClassDef:
3334
if isinstance(function, (scoped_nodes.Lambda, scoped_nodes.FunctionDef)):
3435
if function.root().name == "builtins":
@@ -96,20 +97,19 @@ def object_type(
9697

9798

9899
def _object_type_is_subclass(
99-
obj_type, class_or_seq, context: InferenceContext | None = None
100-
):
101-
if not isinstance(class_or_seq, (tuple, list)):
102-
class_seq = (class_or_seq,)
103-
else:
104-
class_seq = class_or_seq
105-
106-
if isinstance(obj_type, util.UninferableBase):
100+
obj_type: InferenceResult | None,
101+
class_or_seq: list[InferenceResult],
102+
context: InferenceContext | None = None,
103+
) -> util.UninferableBase | bool:
104+
if isinstance(obj_type, util.UninferableBase) or not isinstance(
105+
obj_type, nodes.ClassDef
106+
):
107107
return util.Uninferable
108108

109109
# Instances are not types
110110
class_seq = [
111111
item if not isinstance(item, bases.Instance) else util.Uninferable
112-
for item in class_seq
112+
for item in class_or_seq
113113
]
114114
# strict compatibility with issubclass
115115
# issubclass(type, (object, 1)) evaluates to true
@@ -124,13 +124,13 @@ def _object_type_is_subclass(
124124
return False
125125

126126

127-
def object_isinstance(node, class_or_seq, context: InferenceContext | None = None):
127+
def object_isinstance(
128+
node: InferenceResult,
129+
class_or_seq: list[InferenceResult],
130+
context: InferenceContext | None = None,
131+
) -> util.UninferableBase | bool:
128132
"""Check if a node 'isinstance' any node in class_or_seq.
129133
130-
:param node: A given node
131-
:param class_or_seq: Union[nodes.NodeNG, Sequence[nodes.NodeNG]]
132-
:rtype: bool
133-
134134
:raises AstroidTypeError: if the given ``classes_or_seq`` are not types
135135
"""
136136
obj_type = object_type(node, context)
@@ -139,13 +139,13 @@ def object_isinstance(node, class_or_seq, context: InferenceContext | None = Non
139139
return _object_type_is_subclass(obj_type, class_or_seq, context=context)
140140

141141

142-
def object_issubclass(node, class_or_seq, context: InferenceContext | None = None):
142+
def object_issubclass(
143+
node: nodes.NodeNG,
144+
class_or_seq: list[InferenceResult],
145+
context: InferenceContext | None = None,
146+
) -> util.UninferableBase | bool:
143147
"""Check if a type is a subclass of any node in class_or_seq.
144148
145-
:param node: A given node
146-
:param class_or_seq: Union[Nodes.NodeNG, Sequence[nodes.NodeNG]]
147-
:rtype: bool
148-
149149
:raises AstroidTypeError: if the given ``classes_or_seq`` are not types
150150
:raises AstroidError: if the type of the given node cannot be inferred
151151
or its type's mro doesn't work
@@ -270,7 +270,7 @@ def object_len(node, context: InferenceContext | None = None):
270270
if (
271271
isinstance(node_frame, scoped_nodes.FunctionDef)
272272
and node_frame.name == "__len__"
273-
and hasattr(inferred_node, "_proxied")
273+
and isinstance(inferred_node, bases.Proxy)
274274
and inferred_node._proxied == node_frame.parent
275275
):
276276
message = (

0 commit comments

Comments
 (0)