@@ -69,6 +69,23 @@ pub fn load_workspace(
69
69
extra_env : & FxHashMap < String , Option < String > > ,
70
70
load_config : & LoadCargoConfig ,
71
71
) -> 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 > ) > {
72
89
let ( sender, receiver) = unbounded ( ) ;
73
90
let mut vfs = vfs:: Vfs :: default ( ) ;
74
91
let mut loader = {
@@ -145,18 +162,20 @@ pub fn load_workspace(
145
162
version : 0 ,
146
163
} ) ;
147
164
148
- let db = load_crate_graph (
165
+ load_crate_graph_into_db (
149
166
crate_graph,
150
167
proc_macros,
151
168
project_folders. source_root_config ,
152
169
& mut vfs,
153
170
& receiver,
171
+ db,
154
172
) ;
155
173
156
174
if load_config. prefill_caches {
157
- prime_caches:: parallel_prime_caches ( & db, 1 , & |_| ( ) ) ;
175
+ prime_caches:: parallel_prime_caches ( db, 1 , & |_| ( ) ) ;
158
176
}
159
- Ok ( ( db, vfs, proc_macro_server. and_then ( Result :: ok) ) )
177
+
178
+ Ok ( ( vfs, proc_macro_server. and_then ( Result :: ok) ) )
160
179
}
161
180
162
181
#[ derive( Default ) ]
@@ -425,15 +444,14 @@ pub fn load_proc_macro(
425
444
}
426
445
}
427
446
428
- fn load_crate_graph (
447
+ fn load_crate_graph_into_db (
429
448
crate_graph : CrateGraphBuilder ,
430
449
proc_macros : ProcMacrosBuilder ,
431
450
source_root_config : SourceRootConfig ,
432
451
vfs : & mut vfs:: Vfs ,
433
452
receiver : & Receiver < vfs:: loader:: Message > ,
434
- ) -> RootDatabase {
435
- let lru_cap = std:: env:: var ( "RA_LRU_CAP" ) . ok ( ) . and_then ( |it| it. parse :: < u16 > ( ) . ok ( ) ) ;
436
- let mut db = RootDatabase :: new ( lru_cap) ;
453
+ db : & mut RootDatabase ,
454
+ ) {
437
455
let mut analysis_change = ChangeWithProcMacros :: default ( ) ;
438
456
439
457
db. enable_proc_attr_macros ( ) ;
@@ -470,7 +488,6 @@ fn load_crate_graph(
470
488
analysis_change. set_proc_macros ( proc_macros) ;
471
489
472
490
db. apply_change ( analysis_change) ;
473
- db
474
491
}
475
492
476
493
fn expander_to_proc_macro (
0 commit comments