Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv-cli/src/main_loop.rs')
-rw-r--r--crates/proc-macro-srv-cli/src/main_loop.rs36
1 files changed, 21 insertions, 15 deletions
diff --git a/crates/proc-macro-srv-cli/src/main_loop.rs b/crates/proc-macro-srv-cli/src/main_loop.rs
index feae84534d..4d98a8e29d 100644
--- a/crates/proc-macro-srv-cli/src/main_loop.rs
+++ b/crates/proc-macro-srv-cli/src/main_loop.rs
@@ -169,21 +169,27 @@ struct ProcMacroClientHandle<'a, C: Codec> {
impl<C: Codec> proc_macro_srv::ProcMacroClientInterface for ProcMacroClientHandle<'_, C> {
fn source_text(&mut self, file_id: u32, start: u32, end: u32) -> Option<String> {
- let subrequest = bidirectional::SubRequest::SourceText { file_id, start, end };
- bidirectional::BidirectionalMessage::SubRequest(subrequest)
- .write::<_, C>(&mut self.stdout.lock())
- .unwrap();
- let resp =
- bidirectional::BidirectionalMessage::read::<_, C>(&mut self.stdin.lock(), self.buf)
- .unwrap()
- .expect("client closed connection");
- match resp {
- bidirectional::BidirectionalMessage::SubResponse(api_resp) => match api_resp {
- bidirectional::SubResponse::SourceTextResult { text } => {
- return text;
- }
- },
- other => panic!("expected SubResponse, got {other:?}"),
+ let req = bidirectional::BidirectionalMessage::SubRequest(
+ bidirectional::SubRequest::SourceText { file_id, start, end },
+ );
+
+ if req.write::<_, C>(&mut self.stdout.lock()).is_err() {
+ return None;
+ }
+
+ let msg = match bidirectional::BidirectionalMessage::read::<_, C>(
+ &mut self.stdin.lock(),
+ self.buf,
+ ) {
+ Ok(Some(msg)) => msg,
+ _ => return None,
+ };
+
+ match msg {
+ bidirectional::BidirectionalMessage::SubResponse(
+ bidirectional::SubResponse::SourceTextResult { text },
+ ) => text,
+ _ => None,
}
}
}