diff options
| author | Chayim Refael Friedman <chayimfr@gmail.com> | 2025-07-03 23:08:37 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-03 23:08:37 +0000 |
| commit | a1b66211f2e3cbc374528b78e8af4fb7c8dc99fa (patch) | |
| tree | f576e516b1bcded228b6dc16091d93b6baf377f4 | |
| parent | 3ac0d56e8e3bd600c72f0be8a8706628b72ec231 (diff) | |
| parent | 7a67f31c39adda2eed7e71c1fe7dc7e1723e8242 (diff) | |
| download | rust-a1b66211f2e3cbc374528b78e8af4fb7c8dc99fa.tar.gz rust-a1b66211f2e3cbc374528b78e8af4fb7c8dc99fa.zip | |
Merge pull request #20144 from regexident/load-workspace-into-db
Add `fn load_workspace_into_db` variant for `ra_ap_load_cargo`'s `fn load_workspace`
| -rw-r--r-- | src/tools/rust-analyzer/crates/load-cargo/src/lib.rs | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs b/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs index 1855cc8ae95..26ee698af08 100644 --- a/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs +++ b/src/tools/rust-analyzer/crates/load-cargo/src/lib.rs @@ -69,6 +69,23 @@ pub fn load_workspace( extra_env: &FxHashMap<String, Option<String>>, load_config: &LoadCargoConfig, ) -> anyhow::Result<(RootDatabase, vfs::Vfs, Option<ProcMacroClient>)> { + let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<u16>().ok()); + let mut db = RootDatabase::new(lru_cap); + + let (vfs, proc_macro_server) = load_workspace_into_db(ws, extra_env, load_config, &mut db)?; + + Ok((db, vfs, proc_macro_server)) +} + +// This variant of `load_workspace` allows deferring the loading of rust-analyzer +// into an existing database, which is useful in certain third-party scenarios, +// now that `salsa` supports extending foreign databases (e.g. `RootDatabase`). +pub fn load_workspace_into_db( + ws: ProjectWorkspace, + extra_env: &FxHashMap<String, Option<String>>, + load_config: &LoadCargoConfig, + db: &mut RootDatabase, +) -> anyhow::Result<(vfs::Vfs, Option<ProcMacroClient>)> { let (sender, receiver) = unbounded(); let mut vfs = vfs::Vfs::default(); let mut loader = { @@ -145,18 +162,20 @@ pub fn load_workspace( version: 0, }); - let db = load_crate_graph( + load_crate_graph_into_db( crate_graph, proc_macros, project_folders.source_root_config, &mut vfs, &receiver, + db, ); if load_config.prefill_caches { - prime_caches::parallel_prime_caches(&db, 1, &|_| ()); + prime_caches::parallel_prime_caches(db, 1, &|_| ()); } - Ok((db, vfs, proc_macro_server.and_then(Result::ok))) + + Ok((vfs, proc_macro_server.and_then(Result::ok))) } #[derive(Default)] @@ -425,15 +444,14 @@ pub fn load_proc_macro( } } -fn load_crate_graph( +fn load_crate_graph_into_db( crate_graph: CrateGraphBuilder, proc_macros: ProcMacrosBuilder, source_root_config: SourceRootConfig, vfs: &mut vfs::Vfs, receiver: &Receiver<vfs::loader::Message>, -) -> RootDatabase { - let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<u16>().ok()); - let mut db = RootDatabase::new(lru_cap); + db: &mut RootDatabase, +) { let mut analysis_change = ChangeWithProcMacros::default(); db.enable_proc_attr_macros(); @@ -470,7 +488,6 @@ fn load_crate_graph( analysis_change.set_proc_macros(proc_macros); db.apply_change(analysis_change); - db } fn expander_to_proc_macro( |
