mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 13:33:31 +00:00
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.
This commit is contained in:
commit
b02c214132
1 changed files with 14 additions and 4 deletions
|
@ -139,16 +139,26 @@ impl RequestDispatcher<'_> {
|
||||||
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(ThreadIntent::Worker, f)
|
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>(
|
pub(crate) fn on_latency_sensitive<const ALLOW_RETRYING: bool, R>(
|
||||||
&mut self,
|
&mut self,
|
||||||
f: fn(GlobalStateSnapshot, R::Params) -> anyhow::Result<R::Result>,
|
f: fn(GlobalStateSnapshot, R::Params) -> anyhow::Result<R::Result>,
|
||||||
) -> &mut Self
|
) -> &mut Self
|
||||||
where
|
where
|
||||||
R: lsp_types::request::Request + 'static,
|
R: lsp_types::request::Request<
|
||||||
R::Params: DeserializeOwned + panic::UnwindSafe + Send + fmt::Debug,
|
Params: DeserializeOwned + panic::UnwindSafe + Send + fmt::Debug,
|
||||||
R::Result: Serialize,
|
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)
|
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(ThreadIntent::LatencySensitive, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue