mirror of
https://github.com/github/codeql.git
synced 2026-04-03 06:08:17 +02:00
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:
@@ -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()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user