mirror of
https://github.com/github/codeql.git
synced 2026-04-18 05:24:01 +02:00
C#: Add a parameterized module for a telemetry result ordering predicate (will be needed to narrow the number of produced results).
This commit is contained in:
@@ -107,3 +107,32 @@ class ExternalApi extends DotNet::Callable {
|
||||
/** Holds if this API is supported by existing CodeQL libraries, that is, it is either a recognized source or sink or has a flow summary. */
|
||||
predicate isSupported() { this.hasSummary() or this.isSource() or this.isSink() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A limit for the number of results produced by a telemetry query.
|
||||
*/
|
||||
int resultLimit() { result = 1000 }
|
||||
|
||||
/**
|
||||
* A predicate signature for relevant usage counts of an External API `api`.
|
||||
*/
|
||||
signature predicate relevantUsagesSig(ExternalApi api, int usages);
|
||||
|
||||
/**
|
||||
* Given a predicate to count relevant API usages, this module provides a predicate
|
||||
* for restricting the number or returned results based on a certain limit.
|
||||
*/
|
||||
module Results<relevantUsagesSig/2 getRelevantUsages> {
|
||||
private int getOrder(ExternalApi api) {
|
||||
api =
|
||||
rank[result](ExternalApi a, int usages |
|
||||
getRelevantUsages(a, usages)
|
||||
|
|
||||
a order by usages desc, a.getInfo()
|
||||
)
|
||||
}
|
||||
|
||||
predicate restrict(ExternalApi api, int usages) {
|
||||
getRelevantUsages(api, usages) and getOrder(api) <= resultLimit()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user