@@ -11,7 +11,7 @@ use hir_expand::proc_macro::{
11
11
} ;
12
12
use ide_db:: {
13
13
ChangeWithProcMacros , FxHashMap , RootDatabase ,
14
- base_db:: { CrateGraphBuilder , Env , SourceRoot , SourceRootId } ,
14
+ base_db:: { CrateGraphBuilder , Env , ProcMacroLoadingError , SourceRoot , SourceRootId } ,
15
15
prime_caches,
16
16
} ;
17
17
use itertools:: Itertools ;
@@ -81,19 +81,16 @@ pub fn load_workspace(
81
81
ProcMacroServerChoice :: Sysroot => ws
82
82
. find_sysroot_proc_macro_srv ( )
83
83
. and_then ( |it| ProcMacroClient :: spawn ( & it, extra_env) . map_err ( Into :: into) )
84
- . map_err ( |e| ( e, true ) ) ,
85
- ProcMacroServerChoice :: Explicit ( path) => {
86
- ProcMacroClient :: spawn ( path, extra_env) . map_err ( Into :: into) . map_err ( |e| ( e, true ) )
87
- }
88
- ProcMacroServerChoice :: None => {
89
- Err ( ( anyhow:: format_err!( "proc macro server disabled" ) , false ) )
90
- }
84
+ . map_err ( |e| ProcMacroLoadingError :: ProcMacroSrvError ( e. to_string ( ) . into_boxed_str ( ) ) ) ,
85
+ ProcMacroServerChoice :: Explicit ( path) => ProcMacroClient :: spawn ( path, extra_env)
86
+ . map_err ( |e| ProcMacroLoadingError :: ProcMacroSrvError ( e. to_string ( ) . into_boxed_str ( ) ) ) ,
87
+ ProcMacroServerChoice :: None => Err ( ProcMacroLoadingError :: Disabled ) ,
91
88
} ;
92
89
match & proc_macro_server {
93
90
Ok ( server) => {
94
91
tracing:: info!( path=%server. server_path( ) , "Proc-macro server started" )
95
92
}
96
- Err ( ( e , _ ) ) => {
93
+ Err ( e ) => {
97
94
tracing:: info!( %e, "Failed to start proc-macro server" )
98
95
}
99
96
}
@@ -112,21 +109,18 @@ pub fn load_workspace(
112
109
let proc_macros = {
113
110
let proc_macro_server = match & proc_macro_server {
114
111
Ok ( it) => Ok ( it) ,
115
- Err ( ( e , hard_err ) ) => Err ( ( e. to_string ( ) , * hard_err ) ) ,
112
+ Err ( e ) => Err ( ProcMacroLoadingError :: ProcMacroSrvError ( e. to_string ( ) . into_boxed_str ( ) ) ) ,
116
113
} ;
117
114
proc_macros
118
115
. into_iter ( )
119
116
. map ( |( crate_id, path) | {
120
117
(
121
118
crate_id,
122
- path. map_or_else (
123
- |e| Err ( ( e, true ) ) ,
124
- |( _, path) | {
125
- proc_macro_server. as_ref ( ) . map_err ( Clone :: clone) . and_then (
126
- |proc_macro_server| load_proc_macro ( proc_macro_server, & path, & [ ] ) ,
127
- )
128
- } ,
129
- ) ,
119
+ path. map_or_else ( Err , |( _, path) | {
120
+ proc_macro_server. as_ref ( ) . map_err ( Clone :: clone) . and_then (
121
+ |proc_macro_server| load_proc_macro ( proc_macro_server, & path, & [ ] ) ,
122
+ )
123
+ } ) ,
130
124
)
131
125
} )
132
126
. collect ( )
@@ -391,11 +385,13 @@ pub fn load_proc_macro(
391
385
path : & AbsPath ,
392
386
ignored_macros : & [ Box < str > ] ,
393
387
) -> ProcMacroLoadResult {
394
- let res: Result < Vec < _ > , String > = ( || {
388
+ let res: Result < Vec < _ > , _ > = ( || {
395
389
let dylib = MacroDylib :: new ( path. to_path_buf ( ) ) ;
396
- let vec = server. load_dylib ( dylib) . map_err ( |e| format ! ( "{e}" ) ) ?;
390
+ let vec = server. load_dylib ( dylib) . map_err ( |e| {
391
+ ProcMacroLoadingError :: ProcMacroSrvError ( format ! ( "{e}" ) . into_boxed_str ( ) )
392
+ } ) ?;
397
393
if vec. is_empty ( ) {
398
- return Err ( "proc macro library returned no proc macros" . to_owned ( ) ) ;
394
+ return Err ( ProcMacroLoadingError :: NoProcMacros ) ;
399
395
}
400
396
Ok ( vec
401
397
. into_iter ( )
@@ -412,7 +408,7 @@ pub fn load_proc_macro(
412
408
}
413
409
Err ( e) => {
414
410
tracing:: warn!( "proc-macro loading for {path} failed: {e}" ) ;
415
- Err ( ( e , true ) )
411
+ Err ( e )
416
412
}
417
413
}
418
414
}
0 commit comments