aboutsummaryrefslogtreecommitdiff
path: root/crates/gen_lsp_server/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/gen_lsp_server/src/lib.rs')
-rw-r--r--crates/gen_lsp_server/src/lib.rs35
1 files changed, 13 insertions, 22 deletions
diff --git a/crates/gen_lsp_server/src/lib.rs b/crates/gen_lsp_server/src/lib.rs
index 645728a57..e45a6b5e2 100644
--- a/crates/gen_lsp_server/src/lib.rs
+++ b/crates/gen_lsp_server/src/lib.rs
@@ -59,7 +59,6 @@
59//! } 59//! }
60//! ``` 60//! ```
61 61
62
63#[macro_use] 62#[macro_use]
64extern crate failure; 63extern crate failure;
65#[macro_use] 64#[macro_use]
@@ -74,16 +73,16 @@ extern crate languageserver_types;
74mod msg; 73mod msg;
75mod stdio; 74mod stdio;
76 75
77use crossbeam_channel::{Sender, Receiver}; 76use crossbeam_channel::{Receiver, Sender};
78use languageserver_types::{ 77use languageserver_types::{
79 ServerCapabilities, InitializeResult, InitializeParams, 78 notification::{Exit, Initialized},
80 request::{Initialize, Shutdown}, 79 request::{Initialize, Shutdown},
81 notification::{Initialized, Exit}, 80 InitializeParams, InitializeResult, ServerCapabilities,
82}; 81};
83 82
84pub type Result<T> = ::std::result::Result<T, failure::Error>; 83pub type Result<T> = ::std::result::Result<T, failure::Error>;
85pub use { 84pub use {
86 msg::{RawMessage, RawRequest, RawResponse, RawResponseError, RawNotification, ErrorCode}, 85 msg::{ErrorCode, RawMessage, RawNotification, RawRequest, RawResponse, RawResponseError},
87 stdio::{stdio_transport, Threads}, 86 stdio::{stdio_transport, Threads},
88}; 87};
89 88
@@ -97,11 +96,7 @@ pub fn run_server(
97 caps: ServerCapabilities, 96 caps: ServerCapabilities,
98 receiver: Receiver<RawMessage>, 97 receiver: Receiver<RawMessage>,
99 sender: Sender<RawMessage>, 98 sender: Sender<RawMessage>,
100 server: impl FnOnce( 99 server: impl FnOnce(InitializeParams, &Receiver<RawMessage>, &Sender<RawMessage>) -> Result<()>,
101 InitializeParams,
102 &Receiver<RawMessage>,
103 &Sender<RawMessage>,
104 ) -> Result<()>,
105) -> Result<()> { 100) -> Result<()> {
106 info!("lsp server initializes"); 101 info!("lsp server initializes");
107 let params = initialize(&receiver, &sender, caps)?; 102 let params = initialize(&receiver, &sender, caps)?;
@@ -109,12 +104,10 @@ pub fn run_server(
109 server(params, &receiver, &sender)?; 104 server(params, &receiver, &sender)?;
110 info!("lsp server waiting for exit notification"); 105 info!("lsp server waiting for exit notification");
111 match receiver.recv() { 106 match receiver.recv() {
112 Some(RawMessage::Notification(n)) => { 107 Some(RawMessage::Notification(n)) => n
113 n.cast::<Exit>().map_err(|n| format_err!( 108 .cast::<Exit>()
114 "unexpected notification during shutdown: {:?}", n 109 .map_err(|n| format_err!("unexpected notification during shutdown: {:?}", n))?,
115 ))? 110 m => bail!("unexpected message during shutdown: {:?}", m),
116 }
117 m => bail!("unexpected message during shutdown: {:?}", m)
118 } 111 }
119 info!("lsp server shutdown complete"); 112 info!("lsp server shutdown complete");
120 Ok(()) 113 Ok(())
@@ -141,17 +134,15 @@ fn initialize(
141 Some(RawMessage::Request(req)) => match req.cast::<Initialize>() { 134 Some(RawMessage::Request(req)) => match req.cast::<Initialize>() {
142 Err(req) => bail!("expected initialize request, got {:?}", req), 135 Err(req) => bail!("expected initialize request, got {:?}", req),
143 Ok(req) => req, 136 Ok(req) => req,
144 } 137 },
145 msg => 138 msg => bail!("expected initialize request, got {:?}", msg),
146 bail!("expected initialize request, got {:?}", msg),
147 }; 139 };
148 let resp = RawResponse::ok::<Initialize>(id, &InitializeResult { capabilities: caps }); 140 let resp = RawResponse::ok::<Initialize>(id, &InitializeResult { capabilities: caps });
149 sender.send(RawMessage::Response(resp)); 141 sender.send(RawMessage::Response(resp));
150 match receiver.recv() { 142 match receiver.recv() {
151 Some(RawMessage::Notification(n)) => { 143 Some(RawMessage::Notification(n)) => {
152 n.cast::<Initialized>().map_err(|_| format_err!( 144 n.cast::<Initialized>()
153 "expected initialized notification" 145 .map_err(|_| format_err!("expected initialized notification"))?;
154 ))?;
155 } 146 }
156 _ => bail!("expected initialized notification"), 147 _ => bail!("expected initialized notification"),
157 } 148 }