@@ -308,10 +308,31 @@ impl RequestDispatcher<'_> {
308
308
}
309
309
}
310
310
311
+ #[ derive( Debug ) ]
312
+ enum HandlerCancelledError {
313
+ PropagatedPanic ,
314
+ Inner ( ide:: Cancelled ) ,
315
+ }
316
+
317
+ impl std:: error:: Error for HandlerCancelledError {
318
+ fn source ( & self ) -> Option < & ( dyn std:: error:: Error + ' static ) > {
319
+ match self {
320
+ HandlerCancelledError :: PropagatedPanic => None ,
321
+ HandlerCancelledError :: Inner ( cancelled) => Some ( cancelled) ,
322
+ }
323
+ }
324
+ }
325
+
326
+ impl fmt:: Display for HandlerCancelledError {
327
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
328
+ write ! ( f, "Cancelled" )
329
+ }
330
+ }
331
+
311
332
fn thread_result_to_response < R > (
312
333
id : lsp_server:: RequestId ,
313
334
result : thread:: Result < anyhow:: Result < R :: Result > > ,
314
- ) -> Result < lsp_server:: Response , Cancelled >
335
+ ) -> Result < lsp_server:: Response , HandlerCancelledError >
315
336
where
316
337
R : lsp_types:: request:: Request ,
317
338
R :: Params : DeserializeOwned ,
@@ -331,10 +352,10 @@ where
331
352
message. push_str ( panic_message)
332
353
} else if let Some ( cycle) = panic. downcast_ref :: < Cycle > ( ) {
333
354
tracing:: error!( "Cycle propagated out of salsa! This is a bug: {cycle:?}" ) ;
334
- return Err ( Cancelled :: PropagatedPanic ) ;
355
+ return Err ( HandlerCancelledError :: PropagatedPanic ) ;
335
356
} else if let Ok ( cancelled) = panic. downcast :: < Cancelled > ( ) {
336
357
tracing:: error!( "Cancellation propagated out of salsa! This is a bug" ) ;
337
- return Err ( * cancelled) ;
358
+ return Err ( HandlerCancelledError :: Inner ( * cancelled) ) ;
338
359
}
339
360
340
361
Ok ( lsp_server:: Response :: new_err (
@@ -349,7 +370,7 @@ where
349
370
fn result_to_response < R > (
350
371
id : lsp_server:: RequestId ,
351
372
result : anyhow:: Result < R :: Result > ,
352
- ) -> Result < lsp_server:: Response , Cancelled >
373
+ ) -> Result < lsp_server:: Response , HandlerCancelledError >
353
374
where
354
375
R : lsp_types:: request:: Request ,
355
376
R :: Params : DeserializeOwned ,
@@ -360,7 +381,7 @@ where
360
381
Err ( e) => match e. downcast :: < LspError > ( ) {
361
382
Ok ( lsp_error) => lsp_server:: Response :: new_err ( id, lsp_error. code , lsp_error. message ) ,
362
383
Err ( e) => match e. downcast :: < Cancelled > ( ) {
363
- Ok ( cancelled) => return Err ( cancelled) ,
384
+ Ok ( cancelled) => return Err ( HandlerCancelledError :: Inner ( cancelled) ) ,
364
385
Err ( e) => lsp_server:: Response :: new_err (
365
386
id,
366
387
lsp_server:: ErrorCode :: InternalError as i32 ,
0 commit comments