diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2024-01-01 14:06:56 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2024-01-01 14:10:46 +0100 |
| commit | 3c8dd9e89ef8295241187ddc092d9b675b7db48d (patch) | |
| tree | 7c60c182a332bee45a5a1d58fcfb13a414829892 /crates/rust-analyzer | |
| parent | 06be1b1f34ec358594e6d6493876eb7af22c8b47 (diff) | |
| download | rust-3c8dd9e89ef8295241187ddc092d9b675b7db48d.tar.gz rust-3c8dd9e89ef8295241187ddc092d9b675b7db48d.zip | |
Expose whether a channel has been dropped in lsp-server errors
Diffstat (limited to 'crates/rust-analyzer')
| -rw-r--r-- | crates/rust-analyzer/src/bin/main.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/crates/rust-analyzer/src/bin/main.rs b/crates/rust-analyzer/src/bin/main.rs index 8472e49de98..6f40a4c88ed 100644 --- a/crates/rust-analyzer/src/bin/main.rs +++ b/crates/rust-analyzer/src/bin/main.rs @@ -172,7 +172,15 @@ fn run_server() -> anyhow::Result<()> { let (connection, io_threads) = Connection::stdio(); - let (initialize_id, initialize_params) = connection.initialize_start()?; + let (initialize_id, initialize_params) = match connection.initialize_start() { + Ok(it) => it, + Err(e) => { + if e.channel_is_disconnected() { + io_threads.join()?; + } + return Err(e.into()); + } + }; tracing::info!("InitializeParams: {}", initialize_params); let lsp_types::InitializeParams { root_uri, @@ -240,7 +248,12 @@ fn run_server() -> anyhow::Result<()> { let initialize_result = serde_json::to_value(initialize_result).unwrap(); - connection.initialize_finish(initialize_id, initialize_result)?; + if let Err(e) = connection.initialize_finish(initialize_id, initialize_result) { + if e.channel_is_disconnected() { + io_threads.join()?; + } + return Err(e.into()); + } if !config.has_linked_projects() && config.detached_files().is_empty() { config.rediscover_workspaces(); |
