@@ -152,14 +152,19 @@ impl Application {
152152 break;
153153 }
154154
155− use futures_util::StreamExt;
155+ use futures_util::{FutureExt, StreamExt};
156156
157157 tokio::select! {
158158 event = reader.next() => {
159159 self.handle_terminal_events(event)
160160 }
161161 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;
166+ }
167+ self.render();
163168 }
164169 Some(callback) = &mut self.callbacks.next() => {
165170 self.handle_language_server_callback(callback)
@@ -294,7 +299,6 @@ impl Application {
294299
295300 doc.set_diagnostics(diagnostics);
296301 // TODO: we want to process all the events in queue, then render. publishDiagnostic tends to send a whole bunch of events
297− self.render();
298302 }
299303 }
300304 Notification::ShowMessage(params) => {
@@ -330,7 +334,6 @@ impl Application {
330334 self.editor.clear_status();
331335
332336 // we want to render to clear any leftover spinners or messages
333− self.render();
334337 return;
335338 }
336339 }
@@ -378,7 +381,6 @@ impl Application {
378381 if self.config.lsp.display_messages {
379382 self.editor.set_status(status);
380383 }
381− self.render();
382384 }
383385 _ => unreachable!(),
384386 }