mirror of
https://github.com/github/codeql.git
synced 2026-02-27 04:13:51 +01:00
73 lines
1.9 KiB
Plaintext
73 lines
1.9 KiB
Plaintext
/**
|
|
* @id module-graph
|
|
* @name Module and Item Graph
|
|
* @kind graph
|
|
*/
|
|
|
|
import rust
|
|
|
|
predicate nodes(Item i) { i instanceof RelevantNode }
|
|
|
|
class RelevantNode extends Item {
|
|
RelevantNode() {
|
|
this.getParentNode*() =
|
|
any(Crate m | m.getName() = "test" and m.getVersion() = "0.0.1").getModule()
|
|
}
|
|
|
|
string label() { result = this.toString() }
|
|
}
|
|
|
|
class HasGenericParams extends RelevantNode {
|
|
private GenericParamList params;
|
|
|
|
HasGenericParams() {
|
|
params = this.(Function).getGenericParamList() or
|
|
params = this.(Enum).getGenericParamList() or
|
|
params = this.(Struct).getGenericParamList() or
|
|
params = this.(Union).getGenericParamList() or
|
|
params = this.(Impl).getGenericParamList() or
|
|
params = this.(Enum).getGenericParamList() or
|
|
params = this.(Trait).getGenericParamList() or
|
|
params = this.(TraitAlias).getGenericParamList()
|
|
}
|
|
|
|
override string label() {
|
|
result =
|
|
super.toString() + "<" +
|
|
strictconcat(string part, int index |
|
|
part = params.getGenericParam(index).toString()
|
|
|
|
|
part, ", " order by index
|
|
) + ">"
|
|
}
|
|
}
|
|
|
|
predicate edges(RelevantNode container, RelevantNode element) {
|
|
element = container.(Module).getItemList().getAnItem() or
|
|
element = container.(Impl).getAssocItemList().getAnAssocItem() or
|
|
element = container.(Trait).getAssocItemList().getAnAssocItem()
|
|
}
|
|
|
|
query predicate nodes(RelevantNode node, string attr, string val) {
|
|
nodes(node) and
|
|
(
|
|
attr = "semmle.label" and
|
|
val = node.label()
|
|
or
|
|
attr = "semmle.order" and
|
|
val =
|
|
any(int i | node = rank[i](RelevantNode n | nodes(n) | n order by n.toString())).toString()
|
|
)
|
|
}
|
|
|
|
query predicate edges(RelevantNode pred, RelevantNode succ, string attr, string val) {
|
|
edges(pred, succ) and
|
|
(
|
|
attr = "semmle.label" and
|
|
val = ""
|
|
or
|
|
attr = "semmle.order" and
|
|
val = any(int i | succ = rank[i](Item s | edges(pred, s) | s order by s.toString())).toString()
|
|
)
|
|
}
|