diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2025-05-28 14:24:02 +0200 |
|---|---|---|
| committer | Lukas Wirth <me@lukaswirth.de> | 2025-05-29 08:57:45 +0200 |
| commit | d2bc36821f103cc33a668abc9e49f8e7e9d943de (patch) | |
| tree | 235e64eeecbc3d7ac0fb8badc412a63e56dd6b6e | |
| parent | 8231d888cfc8d4b8b2e47c0489d17d7f0bbbb169 (diff) | |
| download | rust-d2bc36821f103cc33a668abc9e49f8e7e9d943de.tar.gz rust-d2bc36821f103cc33a668abc9e49f8e7e9d943de.zip | |
fix: Recognize salsa cycles in `thread_result_to_response`
| -rw-r--r-- | src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/dispatch.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/dispatch.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/dispatch.rs index f04ada38893..40d05567fcc 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/dispatch.rs +++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/handlers/dispatch.rs @@ -6,7 +6,7 @@ use std::{ use ide_db::base_db::{ DbPanicContext, - salsa::{self, Cancelled}, + salsa::{self, Cancelled, UnexpectedCycle}, }; use lsp_server::{ExtractError, Response, ResponseError}; use serde::{Serialize, de::DeserializeOwned}; @@ -349,11 +349,14 @@ where let mut message = "request handler panicked".to_owned(); if let Some(panic_message) = panic_message { message.push_str(": "); - message.push_str(panic_message) + message.push_str(panic_message); + } else if let Some(cycle) = panic.downcast_ref::<UnexpectedCycle>() { + tracing::error!("{cycle}"); + message.push_str(": unexpected cycle"); } else if let Ok(cancelled) = panic.downcast::<Cancelled>() { tracing::error!("Cancellation propagated out of salsa! This is a bug"); return Err(HandlerCancelledError::Inner(*cancelled)); - } + }; Ok(lsp_server::Response::new_err( id, |
