mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-14 17:07:26 +00:00
fix: Don't respond with an error when requesting a shutdown while starting
This commit is contained in:
parent
43fb9563b2
commit
6a00e14c7a
1 changed files with 26 additions and 22 deletions
|
@ -607,30 +607,34 @@ impl GlobalState {
|
|||
|
||||
/// Handles a request.
|
||||
fn on_request(&mut self, req: Request) {
|
||||
if self.shutdown_requested {
|
||||
self.respond(lsp_server::Response::new_err(
|
||||
req.id,
|
||||
lsp_server::ErrorCode::InvalidRequest as i32,
|
||||
"Shutdown already requested.".to_owned(),
|
||||
));
|
||||
return;
|
||||
let mut dispatcher = RequestDispatcher { req: Some(req), global_state: self };
|
||||
dispatcher.on_sync_mut::<lsp_types::request::Shutdown>(|s, ()| {
|
||||
s.shutdown_requested = true;
|
||||
Ok(())
|
||||
});
|
||||
|
||||
if let RequestDispatcher { req: Some(req), global_state: this } = &mut dispatcher {
|
||||
if this.shutdown_requested {
|
||||
this.respond(lsp_server::Response::new_err(
|
||||
req.id.clone(),
|
||||
lsp_server::ErrorCode::InvalidRequest as i32,
|
||||
"Shutdown already requested.".to_owned(),
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
// Avoid flashing a bunch of unresolved references during initial load.
|
||||
if this.workspaces.is_empty() && !this.is_quiescent() {
|
||||
this.respond(lsp_server::Response::new_err(
|
||||
req.id.clone(),
|
||||
lsp_server::ErrorCode::ContentModified as i32,
|
||||
"waiting for cargo metadata or cargo check".to_owned(),
|
||||
));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Avoid flashing a bunch of unresolved references during initial load.
|
||||
if self.workspaces.is_empty() && !self.is_quiescent() {
|
||||
self.respond(lsp_server::Response::new_err(
|
||||
req.id,
|
||||
lsp_server::ErrorCode::ContentModified as i32,
|
||||
"waiting for cargo metadata or cargo check".to_owned(),
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
RequestDispatcher { req: Some(req), global_state: self }
|
||||
.on_sync_mut::<lsp_types::request::Shutdown>(|s, ()| {
|
||||
s.shutdown_requested = true;
|
||||
Ok(())
|
||||
})
|
||||
dispatcher
|
||||
.on_sync_mut::<lsp_ext::ReloadWorkspace>(handlers::handle_workspace_reload)
|
||||
.on_sync_mut::<lsp_ext::MemoryUsage>(handlers::handle_memory_usage)
|
||||
.on_sync_mut::<lsp_ext::ShuffleCrateGraph>(handlers::handle_shuffle_crate_graph)
|
||||
|
|
Loading…
Reference in a new issue