File tree Expand file tree Collapse file tree 3 files changed +20
-0
lines changed Expand file tree Collapse file tree 3 files changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -13,6 +13,9 @@ What's New in astroid 3.2.1?
13
13
============================
14
14
Release date: TBA
15
15
16
+ * Fix ``RecursionError`` in ``infer_call_result()`` for certain ``__call__`` methods.
17
+
18
+ Closes pylint-dev/pylint#9139
16
19
17
20
18
21
What's New in astroid 3.2.0?
Original file line number Diff line number Diff line change @@ -326,6 +326,11 @@ def infer_call_result(
326
326
for node in self ._proxied .igetattr ("__call__" , context ):
327
327
if isinstance (node , UninferableBase ) or not node .callable ():
328
328
continue
329
+ if isinstance (node , BaseInstance ) and node ._proxied is self ._proxied :
330
+ inferred = True
331
+ yield node
332
+ # Prevent recursion.
333
+ continue
329
334
for res in node .infer_call_result (caller , context ):
330
335
inferred = True
331
336
yield res
Original file line number Diff line number Diff line change @@ -4090,6 +4090,18 @@ class C:
4090
4090
inferred = next (node .infer ())
4091
4091
self .assertRaises (InferenceError , next , inferred .infer_call_result (node ))
4092
4092
4093
+ def test_infer_call_result_same_proxied_class (self ) -> None :
4094
+ node = extract_node (
4095
+ """
4096
+ class A:
4097
+ __call__ = A()
4098
+ A() #@
4099
+ """
4100
+ )
4101
+ inferred = next (node .infer ())
4102
+ fully_evaluated_inference_results = list (inferred .infer_call_result (node ))
4103
+ assert fully_evaluated_inference_results [0 ].name == "A"
4104
+
4093
4105
def test_infer_call_result_with_metaclass (self ) -> None :
4094
4106
node = extract_node ("def with_metaclass(meta, *bases): return 42" )
4095
4107
inferred = next (node .infer_call_result (caller = node ))
You can’t perform that action at this time.
0 commit comments