Skip to content

Commit 7721d14

Browse files
committed
Rust: use getADescendant instead of getAnItem
This should handle all cases where items contained in intermediate nodes, such as MacroCall, ExternBlock and MacroItem nodes.
1 parent da2f0f6 commit 7721d14

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

rust/ql/lib/codeql/rust/internal/PathResolution.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl {
567567

568568
TraitItemNode resolveTraitTy() { result = resolvePath(this.getTraitPath()) }
569569

570-
override AssocItemNode getAnAssocItem() { result = super.getAssocItemList().getAnAssocItem() }
570+
override AssocItemNode getAnAssocItem() { result = this.getADescendant() }
571571

572572
override string getName() { result = "(impl)" }
573573

@@ -760,7 +760,7 @@ class TraitItemNode extends ImplOrTraitItemNode, TypeItemNode instanceof Trait {
760760
pragma[nomagic]
761761
ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) }
762762

763-
override AssocItemNode getAnAssocItem() { result = super.getAssocItemList().getAnAssocItem() }
763+
override AssocItemNode getAnAssocItem() { result = this.getADescendant() }
764764

765765
override string getName() { result = Trait.super.getName().getText() }
766766

@@ -956,7 +956,7 @@ class TypeParamItemNode extends TypeItemNode instanceof TypeParam {
956956

957957
/** Holds if `item` has the name `name` and is a top-level item inside `f`. */
958958
private predicate sourceFileEdge(SourceFile f, string name, ItemNode item) {
959-
item = f.getAnItem() and
959+
item = f.(ItemNode).getADescendant() and
960960
name = item.getName()
961961
}
962962

rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ canonicalPath
2525
| regular.rs:40:1:46:1 | fn enum_qualified_usage | test::regular::enum_qualified_usage |
2626
| regular.rs:48:1:55:1 | fn enum_unqualified_usage | test::regular::enum_unqualified_usage |
2727
| regular.rs:57:1:63:1 | fn enum_match | test::regular::enum_match |
28+
| regular.rs:66:5:66:40 | fn is_alphanum | test::regular::is_alphanum |
2829
| regular.rs:69:1:71:1 | fn is_number_or_letter | test::regular::is_number_or_letter |
2930
canonicalPaths
3031
| anonymous.rs:1:1:1:26 | use ...::Trait | None | None |

0 commit comments

Comments
 (0)