Skip to content

Commit 4c0dbd1

Browse files
committed
Add fn load_workspace_into_db variant for ra_ap_load_cargo's fn load_workspace
1 parent 11d45c8 commit 4c0dbd1

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

crates/load-cargo/src/lib.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,23 @@ pub fn load_workspace(
6969
extra_env: &FxHashMap<String, Option<String>>,
7070
load_config: &LoadCargoConfig,
7171
) -> anyhow::Result<(RootDatabase, vfs::Vfs, Option<ProcMacroClient>)> {
72+
let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<u16>().ok());
73+
let mut db = RootDatabase::new(lru_cap);
74+
75+
let (vfs, proc_macro_server) = load_workspace_into_db(ws, extra_env, load_config, &mut db)?;
76+
77+
Ok((db, vfs, proc_macro_server))
78+
}
79+
80+
// This variant of `load_workspace` allows deferring the loading of rust-analyzer
81+
// into an existing database, which is useful in certain third-party scenarios,
82+
// now that `salsa` supports extending foreign databases (e.g. `RootDatabase`).
83+
pub fn load_workspace_into_db(
84+
ws: ProjectWorkspace,
85+
extra_env: &FxHashMap<String, Option<String>>,
86+
load_config: &LoadCargoConfig,
87+
db: &mut RootDatabase,
88+
) -> anyhow::Result<(vfs::Vfs, Option<ProcMacroClient>)> {
7289
let (sender, receiver) = unbounded();
7390
let mut vfs = vfs::Vfs::default();
7491
let mut loader = {
@@ -139,18 +156,19 @@ pub fn load_workspace(
139156
version: 0,
140157
});
141158

142-
let db = load_crate_graph(
159+
load_crate_graph_into_db(
143160
crate_graph,
144161
proc_macros,
145162
project_folders.source_root_config,
146163
&mut vfs,
147164
&receiver,
165+
db,
148166
);
149167

150168
if load_config.prefill_caches {
151169
prime_caches::parallel_prime_caches(&db, 1, &|_| ());
152170
}
153-
Ok((db, vfs, proc_macro_server.ok()))
171+
Ok((vfs, proc_macro_server.ok()))
154172
}
155173

156174
#[derive(Default)]
@@ -417,15 +435,14 @@ pub fn load_proc_macro(
417435
}
418436
}
419437

420-
fn load_crate_graph(
438+
fn load_crate_graph_into_db(
421439
crate_graph: CrateGraphBuilder,
422440
proc_macros: ProcMacrosBuilder,
423441
source_root_config: SourceRootConfig,
424442
vfs: &mut vfs::Vfs,
425443
receiver: &Receiver<vfs::loader::Message>,
426-
) -> RootDatabase {
427-
let lru_cap = std::env::var("RA_LRU_CAP").ok().and_then(|it| it.parse::<u16>().ok());
428-
let mut db = RootDatabase::new(lru_cap);
444+
db: &mut RootDatabase,
445+
) {
429446
let mut analysis_change = ChangeWithProcMacros::default();
430447

431448
db.enable_proc_attr_macros();
@@ -462,7 +479,6 @@ fn load_crate_graph(
462479
analysis_change.set_proc_macros(proc_macros);
463480

464481
db.apply_change(analysis_change);
465-
db
466482
}
467483

468484
fn expander_to_proc_macro(

0 commit comments

Comments
 (0)