mirror of
https://github.com/github/codeql.git
synced 2026-02-08 03:01:10 +01:00
Add Missing Override query
This commit is contained in:
@@ -228,10 +228,14 @@ class ClassPredicate extends TClassPredicate, Predicate {
|
||||
|
||||
override string getAPrimaryQlClass() { result = "ClassPredicate" }
|
||||
|
||||
predicate isPrivate() {
|
||||
override Class getParent() { result.getAClassPredicate() = this }
|
||||
|
||||
predicate isPrivate() { hasAnnotation("private") }
|
||||
|
||||
predicate hasAnnotation(string name) {
|
||||
exists(Generated::ClassMember member |
|
||||
pred = member.getChild(_) and
|
||||
member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private"
|
||||
member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = name
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
20
ql/src/queries/style/MissingOverride.ql
Normal file
20
ql/src/queries/style/MissingOverride.ql
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* @name Missing override annotation
|
||||
* @description Predicates that overide another predicate should have an `override` annotation.
|
||||
* @kind problem
|
||||
* @problem.severity warning
|
||||
* @precision very-high
|
||||
* @id ql/missing-override
|
||||
* @tags maintainability
|
||||
*/
|
||||
|
||||
import ql
|
||||
|
||||
string getQualifiedName(ClassPredicate p) {
|
||||
result = p.getDeclaringType().getName() + "." + p.getName()
|
||||
}
|
||||
|
||||
from ClassPredicate pred, ClassPredicate sup
|
||||
where pred.overrides(sup) and not pred.hasAnnotation("override")
|
||||
select pred, getQualifiedName(pred) + "overrides $@ but does not have an override annotation.", sup,
|
||||
getQualifiedName(sup)
|
||||
@@ -0,0 +1 @@
|
||||
| Test.qll:12:3:12:33 | ClassPredicate | Wrong.testoverrides $@ but does not have an override annotation. | Test.qll:4:3:4:40 | ClassPredicate | Super.test |
|
||||
@@ -0,0 +1 @@
|
||||
queries/style/MissingOverride.ql
|
||||
13
ql/test/queries/style/MissingOverride/Test.qll
Normal file
13
ql/test/queries/style/MissingOverride/Test.qll
Normal file
@@ -0,0 +1,13 @@
|
||||
import ql
|
||||
|
||||
class Super extends AstNode {
|
||||
predicate test(int i) { i = [1 .. 5] }
|
||||
}
|
||||
|
||||
class Correct extends Super {
|
||||
override predicate test(int i) { i = 3 }
|
||||
}
|
||||
|
||||
class Wrong extends Super {
|
||||
predicate test(int i) { i = 2 }
|
||||
}
|
||||
Reference in New Issue
Block a user