diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll b/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedType.qll similarity index 85% rename from rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll rename to rust/ql/lib/codeql/rust/internal/typeinference/AssociatedType.qll index b53f6177ab9..6bd0db33158 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedTypes.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/AssociatedType.qll @@ -20,12 +20,11 @@ final class AssocType extends TypeAlias { } /** Gets an associated type of `trait` or of a supertrait of `trait`. */ -AssocType getTraitAssocType(Trait trait) { - result.getTrait() = trait.getSupertrait*() -} +AssocType getTraitAssocType(Trait trait) { result.getTrait() = trait.getSupertrait*() } /** Holds if `path` is of the form `::name` */ -predicate asTraitPath(Path path, TypeRepr typeRepr, Path traitPath, string name) { +pragma[nomagic] +predicate pathTypeAsTraitAssoc(Path path, TypeRepr typeRepr, Path traitPath, string name) { exists(PathSegment segment | segment = path.getQualifier().getSegment() and typeRepr = segment.getTypeRepr() and @@ -45,8 +44,8 @@ predicate tpAssociatedType(TypeParam tp, AssocType assoc, Path path) { resolvePath(path) = assoc or exists(PathTypeRepr typeRepr, Path traitPath, string name | - asTraitPath(path, typeRepr, traitPath, name) and - tp = resolvePath(typeRepr.(PathTypeRepr).getPath()) and + pathTypeAsTraitAssoc(path, typeRepr, traitPath, name) and + tp = resolvePath(typeRepr.getPath()) and assoc = resolvePath(traitPath).(TraitItemNode).getAssocItem(name) ) } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll index 4a4f00d7eba..05b6557522a 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll @@ -8,7 +8,7 @@ private import codeql.rust.elements.internal.generated.Raw private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins -private import AssociatedTypes +private import AssociatedType /** * Holds if a dyn trait type for the trait `trait` should have a type parameter diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll index 70e1b0d7e91..ef54fe18bb9 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll @@ -6,7 +6,7 @@ private import codeql.rust.frameworks.stdlib.Stdlib private import Type private import TypeAbstraction private import TypeInference -private import AssociatedTypes +private import AssociatedType bindingset[trait, name] pragma[inline_late] @@ -390,7 +390,7 @@ private module MkTypeMention::AssocType` // ^^^ tm ^^^^^^^^^ name exists(string name, Path traitPath | - asTraitPath(path, tm, traitPath, name) and + pathTypeAsTraitAssoc(path, tm, traitPath, name) and trait = resolvePath(traitPath) and getTraitAssocType(trait, name) = alias )