11//! Loads a Cargo project into a static instance of analysis, without support
22//! for incorporating changes.
3- use std:: { convert :: identity , path:: Path , sync:: Arc } ;
3+ use std:: { path:: Path , sync:: Arc } ;
44
5- use anyhow:: Result ;
5+ use anyhow:: { anyhow , Result } ;
66use crossbeam_channel:: { unbounded, Receiver } ;
77use ide:: { AnalysisHost , Change } ;
88use ide_db:: {
@@ -26,7 +26,7 @@ pub struct LoadCargoConfig {
2626#[ derive( Debug , Clone , PartialEq , Eq ) ]
2727pub enum ProcMacroServerChoice {
2828 Sysroot ,
29- Explicit ( AbsPathBuf , Vec < String > ) ,
29+ Explicit ( AbsPathBuf ) ,
3030 None ,
3131}
3232
@@ -71,14 +71,11 @@ pub fn load_workspace(
7171 let proc_macro_server = match & load_config. with_proc_macro_server {
7272 ProcMacroServerChoice :: Sysroot => ws
7373 . 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)
8077 }
81- ProcMacroServerChoice :: None => Err ( "proc macro server disabled" . to_owned ( ) ) ,
78+ ProcMacroServerChoice :: None => Err ( anyhow ! ( "proc macro server disabled" ) ) ,
8279 } ;
8380
8481 let ( crate_graph, proc_macros) = ws. to_crate_graph (
@@ -93,7 +90,7 @@ pub fn load_workspace(
9390 let proc_macros = {
9491 let proc_macro_server = match & proc_macro_server {
9592 Ok ( it) => Ok ( it) ,
96- Err ( e) => Err ( e. as_str ( ) ) ,
93+ Err ( e) => Err ( e. to_string ( ) ) ,
9794 } ;
9895 proc_macros
9996 . into_iter ( )
@@ -102,7 +99,11 @@ pub fn load_workspace(
10299 crate_id,
103100 path. map_or_else (
104101 |_| 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+ } ,
106107 ) ,
107108 )
108109 } )
0 commit comments