Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | crates/proc-macro-api/src/pool.rs | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/crates/proc-macro-api/src/pool.rs b/crates/proc-macro-api/src/pool.rs index fe4649441b..20389f6668 100644 --- a/crates/proc-macro-api/src/pool.rs +++ b/crates/proc-macro-api/src/pool.rs @@ -37,23 +37,27 @@ impl ProcMacroServerPool { pub(crate) fn load_dylib( &self, dylib: &MacroDylib, - _callback: Option<SubCallback<'_>>, + callback: Option<SubCallback<'_>>, ) -> Result<Vec<ProcMacro>, ServerError> { - let _p = tracing::info_span!("ProcMacroServer::load_dylib").entered(); + let _span = tracing::info_span!("ProcMacroServer::load_dylib").entered(); let dylib_path = Arc::new(dylib.path.clone()); - let dylib_last_modified = std::fs::metadata(dylib_path.as_path()) - .ok() - .and_then(|metadata| metadata.modified().ok()); + let dylib_last_modified = + std::fs::metadata(dylib_path.as_path()).ok().and_then(|m| m.modified().ok()); + + let (first, rest) = self.workers.split_first().expect("worker pool must not be empty"); - let first = &self.workers[0]; - let macros = first.find_proc_macros(&dylib.path, None)?.unwrap(); + let macros = first + .find_proc_macros(&dylib.path, callback)? + .map_err(|e| ServerError { message: e, io: None })?; - for worker in &self.workers[1..] { - let _ = worker.find_proc_macros(&dylib.path, None)?; + for worker in rest { + worker + .find_proc_macros(&dylib.path, callback)? + .map_err(|e| ServerError { message: e, io: None })?; } - let result = macros + Ok(macros .into_iter() .map(|(name, kind)| ProcMacro { pool: self.clone(), @@ -62,9 +66,7 @@ impl ProcMacroServerPool { dylib_path: dylib_path.clone(), dylib_last_modified, }) - .collect(); - - Ok(result) + .collect()) } pub(crate) fn expand( |