Fix RecursionError in infer_call_result()#2432
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #2432 +/- ##
=======================================
Coverage 92.78% 92.78%
=======================================
Files 94 94
Lines 11098 11102 +4
=======================================
+ Hits 10297 10301 +4
Misses 801 801
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Pierre-Sassoulas
left a comment
There was a problem hiding this comment.
I see nothing wrong here, but I would lie if I say I understand what was happening here :D would you mind explaining (very slowly) ?
|
Of course! I noticed that the recursion error reports in pylint seemed to have a line from I edited the test to show this more clearly. Inferring the result of If you comment out the code change and run the test, you'll see the recursive calls in the pytest output: astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):
astroid/bases.py:334: in infer_call_result
for res in node.infer_call_result(caller, context):The point of the patch is to notice that the two things being checked are the same class and bail out. |
|
(The |
Pierre-Sassoulas
left a comment
There was a problem hiding this comment.
Thank you for explaining, make sense !
|
(Sorry forgot to approve) |
(cherry picked from commit d1c37a9)
(cherry picked from commit d1c37a9) Co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com>
Type of Changes
Description
Closes pylint-dev/pylint#9139