Rust: use getADescendant instead of getAnItem

This should handle all cases where items contained in intermediate nodes, such as MacroCall,
ExternBlock and MacroItem nodes.
This commit is contained in:
Arthur Baars
2025-07-07 13:01:11 +02:00
parent da2f0f6069
commit 7721d14314
2 changed files with 4 additions and 3 deletions

View File

@@ -567,7 +567,7 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl {
TraitItemNode resolveTraitTy() { result = resolvePath(this.getTraitPath()) }
override AssocItemNode getAnAssocItem() { result = super.getAssocItemList().getAnAssocItem() }
override AssocItemNode getAnAssocItem() { result = this.getADescendant() }
override string getName() { result = "(impl)" }
@@ -760,7 +760,7 @@ class TraitItemNode extends ImplOrTraitItemNode, TypeItemNode instanceof Trait {
pragma[nomagic]
ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) }
override AssocItemNode getAnAssocItem() { result = super.getAssocItemList().getAnAssocItem() }
override AssocItemNode getAnAssocItem() { result = this.getADescendant() }
override string getName() { result = Trait.super.getName().getText() }
@@ -956,7 +956,7 @@ class TypeParamItemNode extends TypeItemNode instanceof TypeParam {
/** Holds if `item` has the name `name` and is a top-level item inside `f`. */
private predicate sourceFileEdge(SourceFile f, string name, ItemNode item) {
item = f.getAnItem() and
item = f.(ItemNode).getADescendant() and
name = item.getName()
}

View File

@@ -25,6 +25,7 @@ canonicalPath
| regular.rs:40:1:46:1 | fn enum_qualified_usage | test::regular::enum_qualified_usage |
| regular.rs:48:1:55:1 | fn enum_unqualified_usage | test::regular::enum_unqualified_usage |
| regular.rs:57:1:63:1 | fn enum_match | test::regular::enum_match |
| regular.rs:66:5:66:40 | fn is_alphanum | test::regular::is_alphanum |
| regular.rs:69:1:71:1 | fn is_number_or_letter | test::regular::is_number_or_letter |
canonicalPaths
| anonymous.rs:1:1:1:26 | use ...::Trait | None | None |