about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-06-12 00:56:52 +0000
committerbors <bors@rust-lang.org>2022-06-12 00:56:52 +0000
commit604b1c8409e850e738e0c211a11de0c42171a979 (patch)
tree9e1faa4aadf52b4609b2e7539be17d2b48acae87
parentccab003db643b68a783db2d1fecc3ece86c35069 (diff)
parentad109f7f0ab2ae1ad05fc18d9293a158a2b5ecd1 (diff)
downloadrust-604b1c8409e850e738e0c211a11de0c42171a979.tar.gz
rust-604b1c8409e850e738e0c211a11de0c42171a979.zip
Auto merge of #12508 - Veykril:req-retry, r=Veykril
fix: Don't respond to cancelled requests when retrying them

Fixes https://github.com/rust-lang/rust-analyzer/issues/12482
-rw-r--r--crates/rust-analyzer/src/main_loop.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index d70703ff46b..38c23e8b657 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -197,7 +197,7 @@ impl GlobalState {
         let was_quiescent = self.is_quiescent();
         match event {
             Event::Lsp(msg) => match msg {
-                lsp_server::Message::Request(req) => self.on_request(loop_start, req),
+                lsp_server::Message::Request(req) => self.on_new_request(loop_start, req),
                 lsp_server::Message::Notification(not) => {
                     self.on_notification(not)?;
                 }
@@ -209,7 +209,7 @@ impl GlobalState {
                 loop {
                     match task {
                         Task::Response(response) => self.respond(response),
-                        Task::Retry(req) => self.on_request(loop_start, req),
+                        Task::Retry(req) => self.on_request(req),
                         Task::Diagnostics(diagnostics_per_file) => {
                             for (file_id, diagnostics) in diagnostics_per_file {
                                 self.diagnostics.set_native_diagnostics(file_id, diagnostics)
@@ -555,9 +555,12 @@ impl GlobalState {
         Ok(())
     }
 
-    fn on_request(&mut self, request_received: Instant, req: Request) {
+    fn on_new_request(&mut self, request_received: Instant, req: Request) {
         self.register_request(&req, request_received);
+        self.on_request(req);
+    }
 
+    fn on_request(&mut self, req: Request) {
         if self.shutdown_requested {
             self.respond(lsp_server::Response::new_err(
                 req.id,