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?
1313============================
1414Release date: TBA
1515
16+ * Fix ``RecursionError`` in ``infer_call_result()`` for certain ``__call__`` methods.
17+
18+ Closes pylint-dev/pylint#9139
1619
1720
1821What'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(
326326 for node in self ._proxied .igetattr ("__call__" , context ):
327327 if isinstance (node , UninferableBase ) or not node .callable ():
328328 continue
329+ if isinstance (node , BaseInstance ) and node ._proxied is self ._proxied :
330+ inferred = True
331+ yield node
332+ # Prevent recursion.
333+ continue
329334 for res in node .infer_call_result (caller , context ):
330335 inferred = True
331336 yield res
Original file line number Diff line number Diff line change @@ -4090,6 +4090,18 @@ class C:
40904090 inferred = next (node .infer ())
40914091 self .assertRaises (InferenceError , next , inferred .infer_call_result (node ))
40924092
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+
40934105 def test_infer_call_result_with_metaclass (self ) -> None :
40944106 node = extract_node ("def with_metaclass(meta, *bases): return 42" )
40954107 inferred = next (node .infer_call_result (caller = node ))
You can’t perform that action at this time.
0 commit comments