From a6cdde0d0bbcb0d6617052792028eb3b258685cd Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 11 Jun 2021 01:27:20 +0300 Subject: Populate import maps eagerly --- crates/ide/src/prime_caches.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/ide/src/prime_caches.rs b/crates/ide/src/prime_caches.rs index d912a01b8..36801c964 100644 --- a/crates/ide/src/prime_caches.rs +++ b/crates/ide/src/prime_caches.rs @@ -33,14 +33,15 @@ pub(crate) fn prime_caches(db: &RootDatabase, cb: &(dyn Fn(PrimeCachesProgress) // FIXME: This would be easy to parallelize, since it's in the ideal ordering for that. // Unfortunately rayon prevents panics from propagation out of a `scope`, which breaks // cancellation, so we cannot use rayon. - for (i, krate) in topo.iter().enumerate() { - let crate_name = graph[*krate].display_name.as_deref().unwrap_or_default().to_string(); + for (i, &crate_id) in topo.iter().enumerate() { + let crate_name = graph[crate_id].display_name.as_deref().unwrap_or_default().to_string(); cb(PrimeCachesProgress::StartedOnCrate { on_crate: crate_name, n_done: i, n_total: topo.len(), }); - db.crate_def_map(*krate); + db.crate_def_map(crate_id); + db.import_map(crate_id); } } -- cgit v1.2.3 From ba65d259de15ef09eb648d68a3f3f78859223d51 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 11 Jun 2021 01:35:14 +0300 Subject: Prime caches on workspace load --- crates/rust-analyzer/src/cli.rs | 1 - crates/rust-analyzer/src/cli/load_cargo.rs | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/rust-analyzer/src/cli.rs b/crates/rust-analyzer/src/cli.rs index 76b666dc2..25ebcc0ec 100644 --- a/crates/rust-analyzer/src/cli.rs +++ b/crates/rust-analyzer/src/cli.rs @@ -16,7 +16,6 @@ use vfs::Vfs; pub use self::{ analysis_stats::AnalysisStatsCmd, diagnostics::diagnostics, - load_cargo::{load_workspace, load_workspace_at, LoadCargoConfig}, ssr::{apply_ssr_rules, search_for_patterns}, }; diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index 8cee65478..b1c0e015d 100644 --- a/crates/rust-analyzer/src/cli/load_cargo.rs +++ b/crates/rust-analyzer/src/cli/load_cargo.rs @@ -33,7 +33,7 @@ pub fn load_workspace_at( load_workspace(workspace, load_config, progress) } -pub fn load_workspace( +fn load_workspace( ws: ProjectWorkspace, config: &LoadCargoConfig, progress: &dyn Fn(String), @@ -82,6 +82,8 @@ pub fn load_workspace( log::debug!("crate graph: {:?}", crate_graph); let host = load_crate_graph(crate_graph, project_folders.source_root_config, &mut vfs, &receiver); + + host.analysis().prime_caches(|_| {})?; Ok((host, vfs, proc_macro_client)) } -- cgit v1.2.3 From b24f816c0d8aaa37fbc0b33f90dd67afbf28adaa Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 11 Jun 2021 01:48:15 +0300 Subject: Fix visibility issues --- crates/rust-analyzer/src/cli/load_cargo.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index b1c0e015d..612fa527f 100644 --- a/crates/rust-analyzer/src/cli/load_cargo.rs +++ b/crates/rust-analyzer/src/cli/load_cargo.rs @@ -14,13 +14,13 @@ use vfs::{loader::Handle, AbsPath, AbsPathBuf}; use crate::reload::{ProjectFolders, SourceRootConfig}; -pub struct LoadCargoConfig { - pub load_out_dirs_from_check: bool, - pub wrap_rustc: 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 fn load_workspace_at( +pub(crate) fn load_workspace_at( root: &Path, cargo_config: &CargoConfig, load_config: &LoadCargoConfig, -- cgit v1.2.3 From 339448157c479f724ae22fce6d5fa78f76c59720 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 11 Jun 2021 09:27:25 +0300 Subject: Only prefill caches in the completion benchmark --- crates/rust-analyzer/src/cli/analysis_stats.rs | 1 + crates/rust-analyzer/src/cli/diagnostics.rs | 8 ++++++-- crates/rust-analyzer/src/cli/load_cargo.rs | 6 +++++- crates/rust-analyzer/src/cli/ssr.rs | 9 +++++++-- crates/rust-analyzer/src/integrated_benchmarks.rs | 2 ++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs index 5364e907c..843c0ca37 100644 --- a/crates/rust-analyzer/src/cli/analysis_stats.rs +++ b/crates/rust-analyzer/src/cli/analysis_stats.rs @@ -70,6 +70,7 @@ impl AnalysisStatsCmd { load_out_dirs_from_check: self.enable_build_scripts, wrap_rustc: false, with_proc_macro: self.enable_proc_macros, + prefill_caches: false, }; let (host, vfs, _proc_macro) = load_workspace_at(&self.path, &cargo_config, &load_cargo_config, &|_| {})?; diff --git a/crates/rust-analyzer/src/cli/diagnostics.rs b/crates/rust-analyzer/src/cli/diagnostics.rs index c33c8179c..dc9a390fe 100644 --- a/crates/rust-analyzer/src/cli/diagnostics.rs +++ b/crates/rust-analyzer/src/cli/diagnostics.rs @@ -34,8 +34,12 @@ pub fn diagnostics( with_proc_macro: bool, ) -> Result<()> { let cargo_config = Default::default(); - let load_cargo_config = - LoadCargoConfig { load_out_dirs_from_check, with_proc_macro, wrap_rustc: false }; + let load_cargo_config = LoadCargoConfig { + load_out_dirs_from_check, + with_proc_macro, + wrap_rustc: false, + prefill_caches: false, + }; let (host, _vfs, _proc_macro) = load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {})?; let db = host.raw_database(); diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index 612fa527f..19cb1c046 100644 --- a/crates/rust-analyzer/src/cli/load_cargo.rs +++ b/crates/rust-analyzer/src/cli/load_cargo.rs @@ -18,6 +18,7 @@ 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(crate) fn load_workspace_at( @@ -83,7 +84,9 @@ fn load_workspace( let host = load_crate_graph(crate_graph, project_folders.source_root_config, &mut vfs, &receiver); - host.analysis().prime_caches(|_| {})?; + if config.prefill_caches { + host.analysis().prime_caches(|_| {})?; + } Ok((host, vfs, proc_macro_client)) } @@ -146,6 +149,7 @@ mod tests { 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, &|_| {})?; diff --git a/crates/rust-analyzer/src/cli/ssr.rs b/crates/rust-analyzer/src/cli/ssr.rs index 1fd9b5a9b..0b3475e09 100644 --- a/crates/rust-analyzer/src/cli/ssr.rs +++ b/crates/rust-analyzer/src/cli/ssr.rs @@ -13,6 +13,7 @@ pub fn apply_ssr_rules(rules: Vec) -> Result<()> { load_out_dirs_from_check: true, wrap_rustc: false, with_proc_macro: true, + prefill_caches: false, }; let (host, vfs, _proc_macro) = load_workspace_at(&std::env::current_dir()?, &cargo_config, &load_cargo_config, &|_| {})?; @@ -39,8 +40,12 @@ pub fn search_for_patterns(patterns: Vec, debug_snippet: Option