mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-28 18:43:01 +00:00
Prioritize formatting thread tasks in main_loop
This commit is contained in:
parent
35b55fd67f
commit
ec06a9d1d4
2 changed files with 14 additions and 9 deletions
|
|
@ -118,7 +118,7 @@ impl RequestDispatcher<'_> {
|
|||
}
|
||||
return self;
|
||||
}
|
||||
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(
|
||||
self.on_with_thread_intent::<false, ALLOW_RETRYING, R>(
|
||||
ThreadIntent::Worker,
|
||||
f,
|
||||
Self::content_modified_error,
|
||||
|
|
@ -147,7 +147,7 @@ impl RequestDispatcher<'_> {
|
|||
}
|
||||
return self;
|
||||
}
|
||||
self.on_with_thread_intent::<true, false, R>(ThreadIntent::Worker, f, on_cancelled)
|
||||
self.on_with_thread_intent::<false, false, R>(ThreadIntent::Worker, f, on_cancelled)
|
||||
}
|
||||
|
||||
/// Dispatches a non-latency-sensitive request onto the thread pool. When the VFS is marked not
|
||||
|
|
@ -166,7 +166,7 @@ impl RequestDispatcher<'_> {
|
|||
}
|
||||
return self;
|
||||
}
|
||||
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(
|
||||
self.on_with_thread_intent::<false, ALLOW_RETRYING, R>(
|
||||
ThreadIntent::Worker,
|
||||
f,
|
||||
Self::content_modified_error,
|
||||
|
|
@ -193,7 +193,7 @@ impl RequestDispatcher<'_> {
|
|||
}
|
||||
return self;
|
||||
}
|
||||
self.on_with_thread_intent::<true, ALLOW_RETRYING, R>(
|
||||
self.on_with_thread_intent::<false, ALLOW_RETRYING, R>(
|
||||
ThreadIntent::LatencySensitive,
|
||||
f,
|
||||
Self::content_modified_error,
|
||||
|
|
@ -212,7 +212,7 @@ impl RequestDispatcher<'_> {
|
|||
R::Params: DeserializeOwned + panic::UnwindSafe + Send + fmt::Debug,
|
||||
R::Result: Serialize,
|
||||
{
|
||||
self.on_with_thread_intent::<false, false, R>(
|
||||
self.on_with_thread_intent::<true, false, R>(
|
||||
ThreadIntent::LatencySensitive,
|
||||
f,
|
||||
Self::content_modified_error,
|
||||
|
|
@ -231,7 +231,7 @@ impl RequestDispatcher<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
fn on_with_thread_intent<const MAIN_POOL: bool, const ALLOW_RETRYING: bool, R>(
|
||||
fn on_with_thread_intent<const RUSTFMT: bool, const ALLOW_RETRYING: bool, R>(
|
||||
&mut self,
|
||||
intent: ThreadIntent,
|
||||
f: fn(GlobalStateSnapshot, R::Params) -> anyhow::Result<R::Result>,
|
||||
|
|
@ -251,10 +251,10 @@ impl RequestDispatcher<'_> {
|
|||
tracing::debug!(?params);
|
||||
|
||||
let world = self.global_state.snapshot();
|
||||
if MAIN_POOL {
|
||||
&mut self.global_state.task_pool.handle
|
||||
} else {
|
||||
if RUSTFMT {
|
||||
&mut self.global_state.fmt_pool.handle
|
||||
} else {
|
||||
&mut self.global_state.task_pool.handle
|
||||
}
|
||||
.spawn(intent, move || {
|
||||
let result = panic::catch_unwind(move || {
|
||||
|
|
|
|||
|
|
@ -253,6 +253,11 @@ impl GlobalState {
|
|||
&self,
|
||||
inbox: &Receiver<lsp_server::Message>,
|
||||
) -> Result<Option<Event>, crossbeam_channel::RecvError> {
|
||||
// Make sure we reply to formatting requests ASAP so the editor doesn't block
|
||||
if let Ok(task) = self.fmt_pool.receiver.try_recv() {
|
||||
return Ok(Some(Event::Task(task)));
|
||||
}
|
||||
|
||||
select! {
|
||||
recv(inbox) -> msg =>
|
||||
return Ok(msg.ok().map(Event::Lsp)),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue