use anyhow::Result;
use crossbeam_channel::{unbounded, Receiver};
+use hir::db::DefDatabase;
use ide::{AnalysisHost, Change};
use ide_db::base_db::CrateGraph;
use project_model::{
use crate::reload::{ProjectFolders, SourceRootConfig};
-pub struct LoadCargoConfig {
- pub load_out_dirs_from_check: bool,
- pub with_proc_macro: bool,
+pub(crate) struct LoadCargoConfig {
+ pub(crate) load_out_dirs_from_check: bool,
+ pub(crate) wrap_rustc: bool,
+ pub(crate) with_proc_macro: bool,
+ pub(crate) prefill_caches: bool,
}
-pub fn load_workspace_at(
+pub(crate) fn load_workspace_at(
root: &Path,
cargo_config: &CargoConfig,
load_config: &LoadCargoConfig,
load_workspace(workspace, load_config, progress)
}
-pub fn load_workspace(
+fn load_workspace(
ws: ProjectWorkspace,
config: &LoadCargoConfig,
progress: &dyn Fn(String),
};
let build_data = if config.load_out_dirs_from_check {
- let mut collector = BuildDataCollector::default();
+ let mut collector = BuildDataCollector::new(config.wrap_rustc);
ws.collect_build_data_configs(&mut collector);
Some(collector.collect(progress)?)
} else {
log::debug!("crate graph: {:?}", crate_graph);
let host =
load_crate_graph(crate_graph, project_folders.source_root_config, &mut vfs, &receiver);
+
+ if config.prefill_caches {
+ host.analysis().prime_caches(|_| {})?;
+ }
Ok((host, vfs, proc_macro_client))
}
let mut host = AnalysisHost::new(lru_cap);
let mut analysis_change = Change::new();
+ host.raw_database_mut().set_enable_proc_attr_macros(true);
+
// wait until Vfs has loaded all roots
for task in receiver {
match task {
}
}
}
- let source_roots = source_root_config.partition(&vfs);
+ let source_roots = source_root_config.partition(vfs);
analysis_change.set_roots(source_roots);
analysis_change.set_crate_graph(crate_graph);
fn test_loading_rust_analyzer() -> Result<()> {
let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
let cargo_config = Default::default();
- let load_cargo_config =
- LoadCargoConfig { load_out_dirs_from_check: false, with_proc_macro: false };
+ let load_cargo_config = LoadCargoConfig {
+ load_out_dirs_from_check: false,
+ wrap_rustc: false,
+ with_proc_macro: false,
+ prefill_caches: false,
+ };
let (host, _vfs, _proc_macro) =
load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {})?;