@@ -179,7 +179,10 @@ impl GlobalState {
179179 }
180180 }
181181
182- while let Some ( event) = self . next_event ( & inbox) {
182+ while let Ok ( event) = self . next_event ( & inbox) {
183+ let Some ( event) = event else {
184+ anyhow:: bail!( "client exited without proper shutdown sequence" ) ;
185+ } ;
183186 if matches ! (
184187 & event,
185188 Event :: Lsp ( lsp_server:: Message :: Notification ( Notification { method, .. } ) )
@@ -190,7 +193,7 @@ impl GlobalState {
190193 self . handle_event ( event) ?;
191194 }
192195
193- anyhow:: bail !( "client exited without proper shutdown sequence" )
196+ Err ( anyhow:: anyhow !( "A receiver has been dropped, something panicked!" ) )
194197 }
195198
196199 fn register_did_save_capability ( & mut self , additional_patterns : impl Iterator < Item = String > ) {
@@ -237,37 +240,40 @@ impl GlobalState {
237240 ) ;
238241 }
239242
240- fn next_event ( & self , inbox : & Receiver < lsp_server:: Message > ) -> Option < Event > {
243+ fn next_event (
244+ & self ,
245+ inbox : & Receiver < lsp_server:: Message > ,
246+ ) -> Result < Option < Event > , crossbeam_channel:: RecvError > {
241247 select ! {
242248 recv( inbox) -> msg =>
243- msg. ok( ) . map( Event :: Lsp ) ,
249+ return Ok ( msg. ok( ) . map( Event :: Lsp ) ) ,
244250
245251 recv( self . task_pool. receiver) -> task =>
246- Some ( Event :: Task ( task . unwrap ( ) ) ) ,
252+ task . map ( Event :: Task ) ,
247253
248254 recv( self . deferred_task_queue. receiver) -> task =>
249- Some ( Event :: QueuedTask ( task . unwrap ( ) ) ) ,
255+ task . map ( Event :: QueuedTask ) ,
250256
251257 recv( self . fmt_pool. receiver) -> task =>
252- Some ( Event :: Task ( task . unwrap ( ) ) ) ,
258+ task . map ( Event :: Task ) ,
253259
254260 recv( self . loader. receiver) -> task =>
255- Some ( Event :: Vfs ( task . unwrap ( ) ) ) ,
261+ task . map ( Event :: Vfs ) ,
256262
257263 recv( self . flycheck_receiver) -> task =>
258- Some ( Event :: Flycheck ( task . unwrap ( ) ) ) ,
264+ task . map ( Event :: Flycheck ) ,
259265
260266 recv( self . test_run_receiver) -> task =>
261- Some ( Event :: TestResult ( task . unwrap ( ) ) ) ,
267+ task . map ( Event :: TestResult ) ,
262268
263269 recv( self . discover_receiver) -> task =>
264- Some ( Event :: DiscoverProject ( task . unwrap ( ) ) ) ,
270+ task . map ( Event :: DiscoverProject ) ,
265271 }
272+ . map ( Some )
266273 }
267274
268275 fn handle_event ( & mut self , event : Event ) -> anyhow:: Result < ( ) > {
269276 let loop_start = Instant :: now ( ) ;
270- // NOTE: don't count blocking select! call as a loop-turn time
271277 let _p = tracing:: info_span!( "GlobalState::handle_event" , event = %event) . entered ( ) ;
272278
273279 let event_dbg_msg = format ! ( "{event:?}" ) ;
0 commit comments