Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #17932 - Veykril:default-reply-lat-sensitive, r=Veykril
fix: Fix panics for semantic highlighting at startup Without this we might try to process semantic highlighting requests before the database has entries for the given file resulting in a panic. There is no work to be done either way so delay this like we do with other request handlers.
bors 2024-08-20
parent 979e3b5 · parent 9b7b93e · commit b02c214
-rw-r--r--crates/rust-analyzer/src/handlers/dispatch.rs18
1 files changed, 14 insertions, 4 deletions
diff --git a/crates/rust-analyzer/src/handlers/dispatch.rs b/crates/rust-analyzer/src/handlers/dispatch.rs
index a105ec6382..f03de8ce0f 100644
--- a/crates/rust-analyzer/src/handlers/dispatch.rs
+++ b/crates/rust-analyzer/src/handlers/dispatch.rs
@@ -139,16 +139,26 @@ impl RequestDispatcher<'_> {
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(ThreadIntent::Worker, f)
}
- /// Dispatches a latency-sensitive request onto the thread pool.
+ /// Dispatches a latency-sensitive request onto the thread pool. When the VFS is marked not
+ /// ready this will return a default constructed [`R::Result`].
pub(crate) fn on_latency_sensitive<const ALLOW_RETRYING: bool, R>(
&mut self,
f: fn(GlobalStateSnapshot, R::Params) -> anyhow::Result<R::Result>,
) -> &mut Self
where
- R: lsp_types::request::Request + 'static,
- R::Params: DeserializeOwned + panic::UnwindSafe + Send + fmt::Debug,
- R::Result: Serialize,
+ R: lsp_types::request::Request<
+ Params: DeserializeOwned + panic::UnwindSafe + Send + fmt::Debug,
+ Result: Serialize + Default,
+ > + 'static,
{
+ if !self.global_state.vfs_done {
+ if let Some(lsp_server::Request { id, .. }) =
+ self.req.take_if(|it| it.method == R::METHOD)
+ {
+ self.global_state.respond(lsp_server::Response::new_ok(id, R::Result::default()));
+ }
+ return self;
+ }
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(ThreadIntent::LatencySensitive, f)
}