@@ -303,18 +303,21 @@ impl GlobalState {
303
303
let files_config = self . config . files ( ) ;
304
304
let project_folders = ProjectFolders :: new ( & self . workspaces , & files_config. exclude ) ;
305
305
306
- if self . proc_macro_client . is_none ( ) {
306
+ if self . proc_macro_clients . is_empty ( ) {
307
307
if let Some ( ( path, args) ) = self . config . proc_macro_srv ( ) {
308
- match ProcMacroServer :: spawn ( path. clone ( ) , args) {
309
- Ok ( it) => self . proc_macro_client = Some ( it) ,
310
- Err ( err) => {
311
- tracing:: error!(
312
- "Failed to run proc_macro_srv from path {}, error: {:?}" ,
313
- path. display( ) ,
314
- err
315
- ) ;
316
- }
317
- }
308
+ self . proc_macro_clients = ( 0 ..self . workspaces . len ( ) )
309
+ . map ( |_| match ProcMacroServer :: spawn ( path. clone ( ) , args. clone ( ) ) {
310
+ Ok ( it) => Some ( it) ,
311
+ Err ( err) => {
312
+ tracing:: error!(
313
+ "Failed to run proc_macro_srv from path {}, error: {:?}" ,
314
+ path. display( ) ,
315
+ err
316
+ ) ;
317
+ None
318
+ }
319
+ } )
320
+ . collect ( ) ;
318
321
}
319
322
}
320
323
@@ -331,15 +334,7 @@ impl GlobalState {
331
334
332
335
// Create crate graph from all the workspaces
333
336
let crate_graph = {
334
- let proc_macro_client = self . proc_macro_client . as_ref ( ) ;
335
337
let dummy_replacements = self . config . dummy_replacements ( ) ;
336
- let mut load_proc_macro = move |crate_name : & str , path : & AbsPath | {
337
- load_proc_macro (
338
- proc_macro_client,
339
- path,
340
- dummy_replacements. get ( crate_name) . map ( |v| & * * v) . unwrap_or_default ( ) ,
341
- )
342
- } ;
343
338
344
339
let vfs = & mut self . vfs . write ( ) . 0 ;
345
340
let loader = & mut self . loader ;
@@ -359,7 +354,15 @@ impl GlobalState {
359
354
} ;
360
355
361
356
let mut crate_graph = CrateGraph :: default ( ) ;
362
- for ws in self . workspaces . iter ( ) {
357
+ for ( idx, ws) in self . workspaces . iter ( ) . enumerate ( ) {
358
+ let proc_macro_client = self . proc_macro_clients [ idx] . as_ref ( ) ;
359
+ let mut load_proc_macro = move |crate_name : & str , path : & AbsPath | {
360
+ load_proc_macro (
361
+ proc_macro_client,
362
+ path,
363
+ dummy_replacements. get ( crate_name) . map ( |v| & * * v) . unwrap_or_default ( ) ,
364
+ )
365
+ } ;
363
366
crate_graph. extend ( ws. to_crate_graph ( & mut load_proc_macro, & mut load) ) ;
364
367
}
365
368
crate_graph
0 commit comments