mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Rust: extract each project only once
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
use crate::trap::TrapId;
|
||||
use anyhow::Context;
|
||||
use ra_ap_hir::db::DefDatabase;
|
||||
use ra_ap_hir::{Crate};
|
||||
use ra_ap_load_cargo::{load_workspace_at, LoadCargoConfig, ProcMacroServerChoice};
|
||||
use ra_ap_hir::Crate;
|
||||
use ra_ap_load_cargo::{load_workspace, LoadCargoConfig, ProcMacroServerChoice};
|
||||
use ra_ap_project_model::CargoConfig;
|
||||
use ra_ap_project_model::ProjectWorkspace;
|
||||
use ra_ap_project_model::RustLibSource;
|
||||
use std::path::{PathBuf};
|
||||
use ra_ap_vfs::AbsPathBuf;
|
||||
use std::path::PathBuf;
|
||||
|
||||
mod archive;
|
||||
mod config;
|
||||
@@ -14,6 +16,19 @@ pub mod path;
|
||||
mod translate;
|
||||
pub mod trap;
|
||||
|
||||
pub fn find_project_manifests(
|
||||
files: &Vec<PathBuf>,
|
||||
) -> anyhow::Result<Vec<ra_ap_project_model::ProjectManifest>> {
|
||||
let current = std::env::current_dir()?;
|
||||
let abs_files: Vec<_> = files
|
||||
.iter()
|
||||
.map(|path| AbsPathBuf::assert_utf8(current.join(path)))
|
||||
.collect();
|
||||
Ok(ra_ap_project_model::ProjectManifest::discover_all(
|
||||
&abs_files,
|
||||
))
|
||||
}
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let cfg = config::Config::extract().context("failed to load configuration")?;
|
||||
stderrlog::new()
|
||||
@@ -36,10 +51,16 @@ fn main() -> anyhow::Result<()> {
|
||||
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
|
||||
prefill_caches: false,
|
||||
};
|
||||
for input in cfg.inputs {
|
||||
let (db, vfs, _macro_server) = load_workspace_at(&input, &config, &load_config, &progress)
|
||||
.context("loading inputs")?;
|
||||
_macro_server.expect("no macro server");
|
||||
let projects = find_project_manifests(&cfg.inputs).context("loading inputs")?;
|
||||
for project in projects {
|
||||
let mut workspace = ProjectWorkspace::load(project, &config, &progress)?;
|
||||
|
||||
if load_config.load_out_dirs_from_check {
|
||||
let build_scripts = workspace.run_build_scripts(&config, &progress)?;
|
||||
workspace.set_build_scripts(build_scripts)
|
||||
}
|
||||
|
||||
let (db, vfs, _macro_server) = load_workspace(workspace, &config.extra_env, &load_config)?;
|
||||
let crates = <dyn DefDatabase>::crate_graph(&db);
|
||||
for crate_id in crates.iter() {
|
||||
let krate = Crate::from(crate_id);
|
||||
|
||||
Reference in New Issue
Block a user