1
1
//! Loads a Cargo project into a static instance of analysis, without support
2
2
//! for incorporating changes.
3
- use std:: { convert :: identity , path:: Path , sync:: Arc } ;
3
+ use std:: { path:: Path , sync:: Arc } ;
4
4
5
- use anyhow:: Result ;
5
+ use anyhow:: { anyhow , Result } ;
6
6
use crossbeam_channel:: { unbounded, Receiver } ;
7
7
use ide:: { AnalysisHost , Change } ;
8
8
use ide_db:: {
@@ -26,7 +26,7 @@ pub struct LoadCargoConfig {
26
26
#[ derive( Debug , Clone , PartialEq , Eq ) ]
27
27
pub enum ProcMacroServerChoice {
28
28
Sysroot ,
29
- Explicit ( AbsPathBuf , Vec < String > ) ,
29
+ Explicit ( AbsPathBuf ) ,
30
30
None ,
31
31
}
32
32
@@ -71,14 +71,11 @@ pub fn load_workspace(
71
71
let proc_macro_server = match & load_config. with_proc_macro_server {
72
72
ProcMacroServerChoice :: Sysroot => ws
73
73
. find_sysroot_proc_macro_srv ( )
74
- . ok_or_else ( || "failed to find sysroot proc-macro server" . to_owned ( ) )
75
- . and_then ( |it| {
76
- ProcMacroServer :: spawn ( it, identity :: < & [ & str ] > ( & [ ] ) ) . map_err ( |e| e. to_string ( ) )
77
- } ) ,
78
- ProcMacroServerChoice :: Explicit ( path, args) => {
79
- ProcMacroServer :: spawn ( path. clone ( ) , args) . map_err ( |e| e. to_string ( ) )
74
+ . and_then ( |it| ProcMacroServer :: spawn ( it) . map_err ( Into :: into) ) ,
75
+ ProcMacroServerChoice :: Explicit ( path) => {
76
+ ProcMacroServer :: spawn ( path. clone ( ) ) . map_err ( Into :: into)
80
77
}
81
- ProcMacroServerChoice :: None => Err ( "proc macro server disabled" . to_owned ( ) ) ,
78
+ ProcMacroServerChoice :: None => Err ( anyhow ! ( "proc macro server disabled" ) ) ,
82
79
} ;
83
80
84
81
let ( crate_graph, proc_macros) = ws. to_crate_graph (
@@ -93,7 +90,7 @@ pub fn load_workspace(
93
90
let proc_macros = {
94
91
let proc_macro_server = match & proc_macro_server {
95
92
Ok ( it) => Ok ( it) ,
96
- Err ( e) => Err ( e. as_str ( ) ) ,
93
+ Err ( e) => Err ( e. to_string ( ) ) ,
97
94
} ;
98
95
proc_macros
99
96
. into_iter ( )
@@ -102,7 +99,11 @@ pub fn load_workspace(
102
99
crate_id,
103
100
path. map_or_else (
104
101
|_| Err ( "proc macro crate is missing dylib" . to_owned ( ) ) ,
105
- |( _, path) | load_proc_macro ( proc_macro_server, & path, & [ ] ) ,
102
+ |( _, path) | {
103
+ proc_macro_server. as_ref ( ) . map_err ( Clone :: clone) . and_then (
104
+ |proc_macro_server| load_proc_macro ( proc_macro_server, & path, & [ ] ) ,
105
+ )
106
+ } ,
106
107
) ,
107
108
)
108
109
} )
0 commit comments