@@ -152,14 +152,19 @@ impl Application {
155− use futures_util::StreamExt;
155+ use futures_util::{FutureExt, StreamExt};
157 tokio::select! {
157 tokio::select! {
158 event = reader.next() => {
158 event = reader.next() => {
159 self.handle_terminal_events(event)
159 self.handle_terminal_events(event)
161 Some((id, call)) = self.editor.language_servers.incoming.next() => {
161 Some((id, call)) = self.editor.language_servers.incoming.next() => {
162− self.handle_language_server_message(call, id).await
162+ self.handle_language_server_message(call, id).await;
163+ // eagerly process any other available notifications/calls
164+ while let Some(Some((id, call))) = self.editor.language_servers.incoming.next().now_or_never() {
165+ self.handle_language_server_message(call, id).await;
164 Some(callback) = &mut self.callbacks.next() => {
169 Some(callback) = &mut self.callbacks.next() => {
165 self.handle_language_server_callback(callback)
170 self.handle_language_server_callback(callback)
@@ -294,7 +299,6 @@ impl Application {
295 doc.set_diagnostics(diagnostics);
300 doc.set_diagnostics(diagnostics);
296 // TODO: we want to process all the events in queue, then render. publishDiagnostic tends to send a whole bunch of events
301 // TODO: we want to process all the events in queue, then render. publishDiagnostic tends to send a whole bunch of events
300 Notification::ShowMessage(params) => {
304 Notification::ShowMessage(params) => {
@@ -330,7 +334,6 @@ impl Application {
330 self.editor.clear_status();
334 self.editor.clear_status();
332 // we want to render to clear any leftover spinners or messages
336 // we want to render to clear any leftover spinners or messages
@@ -378,7 +381,6 @@ impl Application {
378 if self.config.lsp.display_messages {
381 if self.config.lsp.display_messages {
379 self.editor.set_status(status);
382 self.editor.set_status(status);
383 _ => unreachable!(),
385 _ => unreachable!(),