Python: Add DuckTyping::hasUnreliableMro

Primarily used to filter out false positives in cases where our MRO
approximation may be wrong.
This commit is contained in:
Taus
2026-03-19 15:34:54 +00:00
parent fa8e4f7314
commit 50b3b7ee1f

View File

@@ -2118,6 +2118,19 @@ module DuckTyping {
*/
Function getInit(Class cls) { result = invokedFunctionFromClassConstruction(cls, "__init__") }
/**
* Holds if `cls` or any of its superclasses uses multiple inheritance, or
* has an unresolved base class. In these cases, our MRO approximation may
* resolve to the wrong `__init__`, so we should not flag argument mismatches.
*/
predicate hasUnreliableMro(Class cls) {
exists(Class sup | sup = getADirectSuperclass*(cls) |
exists(sup.getBase(1))
or
hasUnresolvedBase(sup)
)
}
/**
* Holds if `f` overrides a method in a superclass with the same name.
*/