From effc1eae8be338ea949058cc89c39950c25858c5 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 30 Dec 2018 23:02:26 +0300 Subject: migrate gen-lsp-server to new crossbeam --- crates/gen_lsp_server/Cargo.toml | 2 +- crates/gen_lsp_server/src/lib.rs | 10 +++++----- crates/gen_lsp_server/src/stdio.rs | 10 +++++++--- 3 files changed, 13 insertions(+), 9 deletions(-) (limited to 'crates/gen_lsp_server') diff --git a/crates/gen_lsp_server/Cargo.toml b/crates/gen_lsp_server/Cargo.toml index afeeb1513..2aee4ea16 100644 --- a/crates/gen_lsp_server/Cargo.toml +++ b/crates/gen_lsp_server/Cargo.toml @@ -13,4 +13,4 @@ log = "0.4.3" failure = "0.1.2" serde_json = "1.0.24" serde = { version = "1.0.83", features = ["derive"] } -crossbeam-channel = "0.2.4" +crossbeam-channel = "0.3.5" diff --git a/crates/gen_lsp_server/src/lib.rs b/crates/gen_lsp_server/src/lib.rs index 8779fbf0f..b20652928 100644 --- a/crates/gen_lsp_server/src/lib.rs +++ b/crates/gen_lsp_server/src/lib.rs @@ -95,7 +95,7 @@ pub fn run_server( server(params, &receiver, &sender)?; log::info!("lsp server waiting for exit notification"); match receiver.recv() { - Some(RawMessage::Notification(n)) => n + Ok(RawMessage::Notification(n)) => n .cast::() .map_err(|n| format_err!("unexpected notification during shutdown: {:?}", n))?, m => bail!("unexpected message during shutdown: {:?}", m), @@ -109,7 +109,7 @@ pub fn handle_shutdown(req: RawRequest, sender: &Sender) -> Option() { Ok((id, ())) => { let resp = RawResponse::ok::(id, &()); - sender.send(RawMessage::Response(resp)); + let _ = sender.send(RawMessage::Response(resp)); None } Err(req) => Some(req), @@ -122,16 +122,16 @@ fn initialize( caps: ServerCapabilities, ) -> Result { let (id, params) = match receiver.recv() { - Some(RawMessage::Request(req)) => match req.cast::() { + Ok(RawMessage::Request(req)) => match req.cast::() { Err(req) => bail!("expected initialize request, got {:?}", req), Ok(req) => req, }, msg => bail!("expected initialize request, got {:?}", msg), }; let resp = RawResponse::ok::(id, &InitializeResult { capabilities: caps }); - sender.send(RawMessage::Response(resp)); + sender.send(RawMessage::Response(resp)).unwrap(); match receiver.recv() { - Some(RawMessage::Notification(n)) => { + Ok(RawMessage::Notification(n)) => { n.cast::() .map_err(|_| format_err!("expected initialized notification"))?; } diff --git a/crates/gen_lsp_server/src/stdio.rs b/crates/gen_lsp_server/src/stdio.rs index 35d8e46d0..5c8e33854 100644 --- a/crates/gen_lsp_server/src/stdio.rs +++ b/crates/gen_lsp_server/src/stdio.rs @@ -9,11 +9,13 @@ use failure::bail; use crate::{RawMessage, Result}; pub fn stdio_transport() -> (Receiver, Sender, Threads) { - let (writer_sender, mut writer_receiver) = bounded::(16); + let (writer_sender, writer_receiver) = bounded::(16); let writer = thread::spawn(move || { let stdout = stdout(); let mut stdout = stdout.lock(); - writer_receiver.try_for_each(|it| it.write(&mut stdout))?; + writer_receiver + .into_iter() + .try_for_each(|it| it.write(&mut stdout))?; Ok(()) }); let (reader_sender, reader_receiver) = bounded::(16); @@ -21,7 +23,9 @@ pub fn stdio_transport() -> (Receiver, Sender, Threads) let stdin = stdin(); let mut stdin = stdin.lock(); while let Some(msg) = RawMessage::read(&mut stdin)? { - reader_sender.send(msg); + if let Err(_) = reader_sender.send(msg) { + break; + } } Ok(()) }); -- cgit v1.2.3