@@ -179,7 +179,10 @@ impl GlobalState {
179
179
}
180
180
}
181
181
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
+ } ;
183
186
if matches ! (
184
187
& event,
185
188
Event :: Lsp ( lsp_server:: Message :: Notification ( Notification { method, .. } ) )
@@ -190,7 +193,7 @@ impl GlobalState {
190
193
self . handle_event ( event) ?;
191
194
}
192
195
193
- anyhow:: bail !( "client exited without proper shutdown sequence" )
196
+ Err ( anyhow:: anyhow !( "A receiver has been dropped, something panicked!" ) )
194
197
}
195
198
196
199
fn register_did_save_capability ( & mut self , additional_patterns : impl Iterator < Item = String > ) {
@@ -237,37 +240,40 @@ impl GlobalState {
237
240
) ;
238
241
}
239
242
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 > {
241
247
select ! {
242
248
recv( inbox) -> msg =>
243
- msg. ok( ) . map( Event :: Lsp ) ,
249
+ return Ok ( msg. ok( ) . map( Event :: Lsp ) ) ,
244
250
245
251
recv( self . task_pool. receiver) -> task =>
246
- Some ( Event :: Task ( task . unwrap ( ) ) ) ,
252
+ task . map ( Event :: Task ) ,
247
253
248
254
recv( self . deferred_task_queue. receiver) -> task =>
249
- Some ( Event :: QueuedTask ( task . unwrap ( ) ) ) ,
255
+ task . map ( Event :: QueuedTask ) ,
250
256
251
257
recv( self . fmt_pool. receiver) -> task =>
252
- Some ( Event :: Task ( task . unwrap ( ) ) ) ,
258
+ task . map ( Event :: Task ) ,
253
259
254
260
recv( self . loader. receiver) -> task =>
255
- Some ( Event :: Vfs ( task . unwrap ( ) ) ) ,
261
+ task . map ( Event :: Vfs ) ,
256
262
257
263
recv( self . flycheck_receiver) -> task =>
258
- Some ( Event :: Flycheck ( task . unwrap ( ) ) ) ,
264
+ task . map ( Event :: Flycheck ) ,
259
265
260
266
recv( self . test_run_receiver) -> task =>
261
- Some ( Event :: TestResult ( task . unwrap ( ) ) ) ,
267
+ task . map ( Event :: TestResult ) ,
262
268
263
269
recv( self . discover_receiver) -> task =>
264
- Some ( Event :: DiscoverProject ( task . unwrap ( ) ) ) ,
270
+ task . map ( Event :: DiscoverProject ) ,
265
271
}
272
+ . map ( Some )
266
273
}
267
274
268
275
fn handle_event ( & mut self , event : Event ) -> anyhow:: Result < ( ) > {
269
276
let loop_start = Instant :: now ( ) ;
270
- // NOTE: don't count blocking select! call as a loop-turn time
271
277
let _p = tracing:: info_span!( "GlobalState::handle_event" , event = %event) . entered ( ) ;
272
278
273
279
let event_dbg_msg = format ! ( "{event:?}" ) ;
0 commit comments