diff options
Diffstat (limited to 'crates/gen_lsp_server')
-rw-r--r-- | crates/gen_lsp_server/src/stdio.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/crates/gen_lsp_server/src/stdio.rs b/crates/gen_lsp_server/src/stdio.rs index dab2d8da8..2d6418400 100644 --- a/crates/gen_lsp_server/src/stdio.rs +++ b/crates/gen_lsp_server/src/stdio.rs | |||
@@ -5,6 +5,7 @@ use std::{ | |||
5 | 5 | ||
6 | use crossbeam_channel::{bounded, Receiver, Sender}; | 6 | use crossbeam_channel::{bounded, Receiver, Sender}; |
7 | use failure::bail; | 7 | use failure::bail; |
8 | use lsp_types::notification::Exit; | ||
8 | 9 | ||
9 | use crate::{RawMessage, Result}; | 10 | use crate::{RawMessage, Result}; |
10 | 11 | ||
@@ -21,7 +22,14 @@ pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) | |||
21 | let stdin = stdin(); | 22 | let stdin = stdin(); |
22 | let mut stdin = stdin.lock(); | 23 | let mut stdin = stdin.lock(); |
23 | while let Some(msg) = RawMessage::read(&mut stdin)? { | 24 | while let Some(msg) = RawMessage::read(&mut stdin)? { |
24 | if let Err(_) = reader_sender.send(msg) { | 25 | let is_exit = match &msg { |
26 | RawMessage::Notification(n) => n.is::<Exit>(), | ||
27 | _ => false, | ||
28 | }; | ||
29 | |||
30 | reader_sender.send(msg).unwrap(); | ||
31 | |||
32 | if is_exit { | ||
25 | break; | 33 | break; |
26 | } | 34 | } |
27 | } | 35 | } |