The Bug That Hid Behind Its Own Comment: Fixing Inconsistent Inference in astroid
This is a submission for DEV's Summer Bug Smash: Clear the Lineup powered by Sentry . Project Overview astroid is the static-analysis engine that powers pylint — one of the most widely used linters in the Python ecosystem. Instead of running your code, astroid builds a model of what your code would do (a process called "inference") so pylint can catch real bugs before you ever hit run. That means…
The DEV Summer Bug Smash, powered by Sentry, aims to clear the lineup of bugs in astroid, the static-analysis engine for pylint. Astroid must maintain consistent inference logic, otherwise it risks missing real bugs or flagging correct code as broken. Issue #3077 highlighted a discrepancy in how astroid inferred identical `typing.cast(T, self)` expressions based solely on the surrounding call syntax. This inconsistency led to false positives in pylint's flagging when the code was structurally symmetric.
In the `BaseInstance.infer_call_result` function, a conditional branch attempted to resolve the call as a plain attribute lookup on the callee, which failed for `self.separator()` and raised an `InferenceError`. Since this was a generator function, the exception terminated the entire function, preventing the subsequent code that correctly resolved `__call__` from executing.
The comment mentioned that the function would normally infer the call to the `__call__` dunder, but this path was never reached due to the unhandled exception.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.