diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 7461f8e0131f..1d2b69ce32ed 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -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 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index b083b6e6ab55..43819916ce08 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -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 diff --git a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll index 86304cd23de3..893708164d80 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll @@ -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 { } } diff --git a/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll b/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll index e68306a3cf9e..65acc978eee1 100644 --- a/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll +++ b/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll @@ -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 { 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 { @@ -133,7 +143,7 @@ private module RustAnalyzerCallGraph implements CompareSig { 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 {