Rust: Minor path resolution fix for ($)crate paths

This commit is contained in:
Tom Hvitved
2025-04-04 14:44:39 +02:00
parent 6f704f088e
commit 8b6c8d7174

View File

@@ -194,21 +194,11 @@ abstract class ItemNode extends Locatable {
this = result.(ImplOrTraitItemNode).getAnItemInSelfScope()
or
name = "crate" and
result =
any(CrateItemNode crate |
this = crate.getASourceFile()
or
this = crate.getModuleNode()
)
this = result.(CrateItemNode).getARootModuleNode()
or
// todo: implement properly
name = "$crate" and
result =
any(CrateItemNode crate |
this = crate.getASourceFile()
or
this = crate.getModuleNode()
).(Crate).getADependency*() and
result = any(CrateItemNode crate | this = crate.getARootModuleNode()).(Crate).getADependency*() and
result.(CrateItemNode).isPotentialDollarCrateTarget()
}
@@ -237,7 +227,7 @@ abstract private class ModuleLikeNode extends ItemNode {
predicate isRoot() {
this instanceof SourceFileItemNode
or
this = any(CrateItemNode c).getModuleNode()
this = any(Crate c).getModule()
}
}
@@ -294,6 +284,15 @@ class CrateItemNode extends ItemNode instanceof Crate {
)
}
/**
* Gets a root module node belonging to this crate.
*/
ModuleLikeNode getARootModuleNode() {
result = this.getASourceFile()
or
result = super.getModule()
}
pragma[nomagic]
predicate isPotentialDollarCrateTarget() {
exists(string name, RelevantPath p |