Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions rust/extractor/src/crate_graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,17 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData
let file_label = trap.emit_file(root_module_file);
trap.emit_file_only_location(file_label, root_module);

let crate_dependencies: Vec<generated::NamedCrate> = krate
.dependencies
.iter()
.flat_map(|x| crate_id_map.get(&x.crate_id).map(|y| (&x.name, y)))
.map(|(name, (module, hash))| generated::NamedCrate {
id: trap::TrapId::Star,
name: name.to_string(),
crate_: trap.label(format!("{}:{hash}", module.display()).into()),
})
.collect();

let element = generated::Crate {
id: trap::TrapId::Key(format!("{}:{hash}", root_module_file.display())),
name: krate
Expand All @@ -102,11 +113,9 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData
.into_iter()
.map(|x| format!("{x}"))
.collect(),
dependencies: krate
.dependencies
.iter()
.flat_map(|x| crate_id_map.get(&x.crate_id))
.map(|(module, hash)| trap.label(format!("{}:{hash}", module.display()).into()))
named_dependencies: crate_dependencies
.into_iter()
.map(|dep| trap.emit(dep))
.collect(),
};
trap.emit(element);
Expand Down
2 changes: 1 addition & 1 deletion rust/extractor/src/generated/.generated.list

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 33 additions & 3 deletions rust/extractor/src/generated/top.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 10 additions & 6 deletions rust/ql/.generated.list

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions rust/ql/.gitattributes

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions rust/ql/lib/codeql/rust/elements/Crate.qll

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ private import codeql.rust.elements.internal.generated.Crate
*/
module Impl {
private import rust
private import codeql.rust.elements.internal.NamedCrate

class Crate extends Generated::Crate {
override string toStringImpl() {
Expand All @@ -30,6 +31,33 @@ module Impl {
i = 4 and result = ")"
}

/**
* Gets the dependency named `name`, if any.
*
* `name` may be different from the name of the crate, when the dependency has been
* renamed in the `Cargo.toml` file, for example in
*
* ```yml
* [dependencies]
* my_serde = {package = "serde", version = "1.0.217"}
* ```
*
* the name of the dependency is `my_serde`, but the name of the crate is `serde`.
*/
pragma[nomagic]
Crate getDependency(string name) {
exists(NamedCrate c |
c = this.getANamedDependency() and
result = c.getCrate() and
name = c.getName()
)
}

/**
* Gets any dependency of this crate.
*/
Crate getADependency() { result = this.getDependency(_) }

override Location getLocation() { result = this.getModule().getLocation() }
}
}
13 changes: 13 additions & 0 deletions rust/ql/lib/codeql/rust/elements/internal/NamedCrate.qll

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions rust/ql/lib/codeql/rust/elements/internal/NamedCrateImpl.qll

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading