Python: Add ternary overridesMethod

This one also allows easy access to the method being overridden and the
class on which it resides. This let's us simplify DocStrings.ql
accordingly.
This commit is contained in:
Taus
2026-03-23 15:21:27 +00:00
parent 1ffcdc9293
commit a276f721f7
2 changed files with 13 additions and 5 deletions

View File

@@ -2135,8 +2135,18 @@ module DuckTyping {
/**
* Holds if `f` overrides a method in a superclass with the same name.
*/
predicate overridesMethod(Function f) {
exists(Class cls | f.getScope() = cls | hasMethod(getADirectSuperclass(cls), f.getName()))
predicate overridesMethod(Function f) { overridesMethod(f, _, _) }
/**
* Holds if `f` overrides `overridden` declared in `superclass`.
*/
predicate overridesMethod(Function f, Class superclass, Function overridden) {
exists(Class cls |
f.getScope() = cls and
superclass = getADirectSuperclass+(cls) and
overridden = superclass.getAMethod() and
overridden.getName() = f.getName()
)
}
/**

View File

@@ -30,9 +30,7 @@ predicate needs_docstring(Scope s) {
predicate function_needs_docstring(FunctionMetrics f) {
not exists(Function base |
DuckTyping::overridesMethod(f) and
base.getScope() = getADirectSuperclass+(f.getScope()) and
base.getName() = f.getName() and
DuckTyping::overridesMethod(f, _, base) and
not function_needs_docstring(base)
) and
f.getName() != "lambda" and