@@ -353,6 +353,11 @@ impl Transport {
353353 }
354354 }
355355
356+ fn is_shutdown(payload: &Payload) -> bool {
357+ use lsp_types::request::{Request, Shutdown};
358+ matches!(payload, Payload::Request { value: jsonrpc::MethodCall { method, .. }, .. } if method == Shutdown::METHOD)
359+ }
360+
356361 // TODO: events that use capabilities need to do the right thing
357362
358363 loop {
@@ -391,7 +396,10 @@ impl Transport {
391396 }
392397 msg = client_rx.recv() => {
393398 if let Some(msg) = msg {
394− if is_pending && !is_initialize(&msg) {
399+ if is_pending && is_shutdown(&msg) {
400+ log::info!("Language server not initialized, shutting down");
401+ break;
402+ } else if is_pending && !is_initialize(&msg) {
395403 // ignore notifications
396404 if let Payload::Notification(_) = msg {
397405 continue;