diff options
Diffstat (limited to 'crates/ra_lsp_server/src/main.rs')
-rw-r--r-- | crates/ra_lsp_server/src/main.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/crates/ra_lsp_server/src/main.rs b/crates/ra_lsp_server/src/main.rs index ae1392cb5..1debe7660 100644 --- a/crates/ra_lsp_server/src/main.rs +++ b/crates/ra_lsp_server/src/main.rs | |||
@@ -1,5 +1,5 @@ | |||
1 | use flexi_logger::{Duplicate, Logger}; | 1 | use flexi_logger::{Duplicate, Logger}; |
2 | use gen_lsp_server::{run_server, stdio_transport}; | 2 | use lsp_server::{run_server, stdio_transport, LspServerError}; |
3 | 3 | ||
4 | use ra_lsp_server::{show_message, Result, ServerConfig}; | 4 | use ra_lsp_server::{show_message, Result, ServerConfig}; |
5 | use ra_prof; | 5 | use ra_prof; |
@@ -29,9 +29,11 @@ fn main() -> Result<()> { | |||
29 | } | 29 | } |
30 | 30 | ||
31 | fn main_inner() -> Result<()> { | 31 | fn main_inner() -> Result<()> { |
32 | let (receiver, sender, threads) = stdio_transport(); | 32 | let (sender, receiver, io_threads) = stdio_transport(); |
33 | let cwd = std::env::current_dir()?; | 33 | let cwd = std::env::current_dir()?; |
34 | run_server(ra_lsp_server::server_capabilities(), receiver, sender, |params, r, s| { | 34 | let caps = serde_json::to_value(ra_lsp_server::server_capabilities()).unwrap(); |
35 | run_server(caps, sender, receiver, |params, s, r| { | ||
36 | let params: lsp_types::InitializeParams = serde_json::from_value(params)?; | ||
35 | let root = params.root_uri.and_then(|it| it.to_file_path().ok()).unwrap_or(cwd); | 37 | let root = params.root_uri.and_then(|it| it.to_file_path().ok()).unwrap_or(cwd); |
36 | 38 | ||
37 | let workspace_roots = params | 39 | let workspace_roots = params |
@@ -62,9 +64,13 @@ fn main_inner() -> Result<()> { | |||
62 | .unwrap_or_default(); | 64 | .unwrap_or_default(); |
63 | 65 | ||
64 | ra_lsp_server::main_loop(workspace_roots, params.capabilities, server_config, r, s) | 66 | ra_lsp_server::main_loop(workspace_roots, params.capabilities, server_config, r, s) |
67 | }) | ||
68 | .map_err(|err| match err { | ||
69 | LspServerError::ProtocolError(err) => err.into(), | ||
70 | LspServerError::ServerError(err) => err, | ||
65 | })?; | 71 | })?; |
66 | log::info!("shutting down IO..."); | 72 | log::info!("shutting down IO..."); |
67 | threads.join()?; | 73 | io_threads.join()?; |
68 | log::info!("... IO is down"); | 74 | log::info!("... IO is down"); |
69 | Ok(()) | 75 | Ok(()) |
70 | } | 76 | } |