Skip to content

Commit 98aa678

Browse files
committed
Auto merge of rust-lang#13476 - Veykril:prefer-shutdown, r=Veykril
fix: Don't respond with an error when requesting a shutdown while starting
2 parents 43fb956 + 6a00e14 commit 98aa678

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

crates/rust-analyzer/src/main_loop.rs

+25-21
Original file line numberDiff line numberDiff line change
@@ -607,30 +607,34 @@ impl GlobalState {
607607

608608
/// Handles a request.
609609
fn on_request(&mut self, req: Request) {
610-
if self.shutdown_requested {
611-
self.respond(lsp_server::Response::new_err(
612-
req.id,
613-
lsp_server::ErrorCode::InvalidRequest as i32,
614-
"Shutdown already requested.".to_owned(),
615-
));
616-
return;
617-
}
610+
let mut dispatcher = RequestDispatcher { req: Some(req), global_state: self };
611+
dispatcher.on_sync_mut::<lsp_types::request::Shutdown>(|s, ()| {
612+
s.shutdown_requested = true;
613+
Ok(())
614+
});
615+
616+
if let RequestDispatcher { req: Some(req), global_state: this } = &mut dispatcher {
617+
if this.shutdown_requested {
618+
this.respond(lsp_server::Response::new_err(
619+
req.id.clone(),
620+
lsp_server::ErrorCode::InvalidRequest as i32,
621+
"Shutdown already requested.".to_owned(),
622+
));
623+
return;
624+
}
618625

619-
// Avoid flashing a bunch of unresolved references during initial load.
620-
if self.workspaces.is_empty() && !self.is_quiescent() {
621-
self.respond(lsp_server::Response::new_err(
622-
req.id,
623-
lsp_server::ErrorCode::ContentModified as i32,
624-
"waiting for cargo metadata or cargo check".to_owned(),
625-
));
626-
return;
626+
// Avoid flashing a bunch of unresolved references during initial load.
627+
if this.workspaces.is_empty() && !this.is_quiescent() {
628+
this.respond(lsp_server::Response::new_err(
629+
req.id.clone(),
630+
lsp_server::ErrorCode::ContentModified as i32,
631+
"waiting for cargo metadata or cargo check".to_owned(),
632+
));
633+
return;
634+
}
627635
}
628636

629-
RequestDispatcher { req: Some(req), global_state: self }
630-
.on_sync_mut::<lsp_types::request::Shutdown>(|s, ()| {
631-
s.shutdown_requested = true;
632-
Ok(())
633-
})
637+
dispatcher
634638
.on_sync_mut::<lsp_ext::ReloadWorkspace>(handlers::handle_workspace_reload)
635639
.on_sync_mut::<lsp_ext::MemoryUsage>(handlers::handle_memory_usage)
636640
.on_sync_mut::<lsp_ext::ShuffleCrateGraph>(handlers::handle_shuffle_crate_graph)

0 commit comments

Comments
 (0)