Rust: Remove Resolvable.resolvesAsItem

Removes one more use of extractor-based resolution.
This commit is contained in:
Tom Hvitved
2025-07-11 14:17:03 +02:00
parent 0a18db8960
commit 655b3de6bb
4 changed files with 16 additions and 20 deletions

View File

@@ -371,6 +371,7 @@ lib/codeql/rust/elements/internal/RefTypeReprConstructor.qll 8e7012b456ebf1cc7a2
lib/codeql/rust/elements/internal/RefTypeReprImpl.qll 553dd95e1a49ab7aef5db08e7bb550104c604ec33c9a3c7529370cd47c6a0965 8902db7c814f631c2a995df5911a7b13b6a38c524417e4bbbf2bda74ad53e14c
lib/codeql/rust/elements/internal/RenameConstructor.qll 65fa2e938978d154701e6cac05b56320b176ee014ef5c20a7b66f3e94fd5c4a7 dfc0ff4606b8e1c14003cc93a0811f4d62ec993b07ff3c1aa0776746577ed103
lib/codeql/rust/elements/internal/RenameImpl.qll 61c681055f1f86402af0772539f702e9e19a123f8cfcfca225535c3a1a4cb1d7 1aa1c78616c4b54a31c8af74de141aef9e5ada53f3859df631ecb4238faabdbf
lib/codeql/rust/elements/internal/ResolvableImpl.qll 7d6d02eceef54d588de6204abbcf7a6454916e49180e3db8a72131032cec5837 9c3a28ea0d293b449c69982e3695903a10510096e765a53c1b34ac3ad009a9f4
lib/codeql/rust/elements/internal/RestPatConstructor.qll 45430925ddf08fba70ede44c7f413ddb41b3113c149b7efc276e0c2bf72507b4 25c678898d72446e7a975bb8b7f2fde51e55b59dbd42f2cca997c833b1a995f1
lib/codeql/rust/elements/internal/RetTypeReprConstructor.qll 6dcb56c92a13f5ca2c9a8344bc05638cc611543896c578cd6ca185054f155537 3fe34953ba397dc31533bd28b48df76693e86b51c4a89c26ad4dfdbd816a0874
lib/codeql/rust/elements/internal/RetTypeReprImpl.qll 799e55ffcf27bf6f010419e1d61ebbbf3448e37b903b0f13984d0b44d6b7a999 be774bb09d121c35f40c75d5bee08918e7a6b5fccb4fd573fc55a650466b46e0

1
rust/ql/.gitattributes generated vendored
View File

@@ -373,6 +373,7 @@
/lib/codeql/rust/elements/internal/RefTypeReprImpl.qll linguist-generated
/lib/codeql/rust/elements/internal/RenameConstructor.qll linguist-generated
/lib/codeql/rust/elements/internal/RenameImpl.qll linguist-generated
/lib/codeql/rust/elements/internal/ResolvableImpl.qll linguist-generated
/lib/codeql/rust/elements/internal/RestPatConstructor.qll linguist-generated
/lib/codeql/rust/elements/internal/RetTypeReprConstructor.qll linguist-generated
/lib/codeql/rust/elements/internal/RetTypeReprImpl.qll linguist-generated

View File

@@ -1,3 +1,4 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module provides a hand-modifiable wrapper around the generated class `Resolvable`.
*
@@ -11,25 +12,8 @@ private import codeql.rust.elements.internal.generated.Resolvable
* be referenced directly.
*/
module Impl {
private import codeql.rust.elements.internal.ItemImpl::Impl
// the following QLdoc is generated: if you need to edit it, do it in the schema file
/**
* One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`.
*/
class Resolvable extends Generated::Resolvable {
/**
* Holds if this resolvable and the item `i` resolves to the same canonical
* path in the same crate
*/
pragma[nomagic]
predicate resolvesAsItem(Item i) {
this.getResolvedPath() = i.getExtendedCanonicalPath() and
(
this.getResolvedCrateOrigin() = i.getCrateOrigin()
or
not this.hasResolvedCrateOrigin() and not i.hasCrateOrigin()
)
}
}
class Resolvable extends Generated::Resolvable { }
}

View File

@@ -7,6 +7,16 @@
import rust
pragma[nomagic]
private predicate resolvesAsItem(Resolvable r, Item i) {
r.getResolvedPath() = i.getExtendedCanonicalPath() and
(
r.getResolvedCrateOrigin() = i.getCrateOrigin()
or
not r.hasResolvedCrateOrigin() and not i.hasCrateOrigin()
)
}
private signature module ResolvableSig {
class Source {
string toString();
@@ -94,7 +104,7 @@ private module PathResolution implements ResolvableSig {
private module RustAnalyzerPathResolution implements CompareSig<PathResolution> {
predicate isResolvable(PathResolution::Source s) { s.hasResolvedPath() }
Item resolve(PathResolution::Source s) { s.resolvesAsItem(result) }
Item resolve(PathResolution::Source s) { resolvesAsItem(s, result) }
}
private module QlPathResolution implements CompareSig<PathResolution> {
@@ -133,7 +143,7 @@ private module RustAnalyzerCallGraph implements CompareSig<CallGraph> {
CallExprBaseImpl::getCallResolvable(c).hasResolvedPath()
}
Item resolve(CallExprBase c) { CallExprBaseImpl::getCallResolvable(c).resolvesAsItem(result) }
Item resolve(CallExprBase c) { resolvesAsItem(CallExprBaseImpl::getCallResolvable(c), result) }
}
private module QlCallGraph implements CompareSig<CallGraph> {