@@ -287,9 +287,6 @@ impl Application {
288 S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin,
288 S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin,
290− #[cfg(feature = "integration")]
291− let mut idle_handled = false;
294 if self.editor.should_close() {
291 if self.editor.should_close() {
295 return false;
292 return false;
@@ -315,56 +312,19 @@ impl Application {
315 self.render();
312 self.render();
317 event = self.editor.wait_event() => {
314 event = self.editor.wait_event() => {
318− log::debug!("received editor event: {:?}", event);
315+ let _idle_handled = self.handle_editor_event(event).await;
320− match event {
317+ // for integration tests only, reset the idle timer after every
321− EditorEvent::DocumentSave(event) => {
318+ // event to signal when test events are done processing
322− self.handle_document_write(event);
325− EditorEvent::ConfigEvent(event) => {
326− self.handle_config_events(event);
329− EditorEvent::LanguageServerMessage((id, call)) => {
330− self.handle_language_server_message(call, id).await;
331− // limit render calls for fast language server messages
332− let last = self.editor.language_servers.incoming.is_empty();
334− if last || self.last_render.elapsed() > LSP_DEADLINE {
336− self.last_render = Instant::now();
339− EditorEvent::DebuggerEvent(payload) => {
340− let needs_render = self.editor.handle_debugger_message(payload).await;
345− EditorEvent::IdleTimer => {
346− self.editor.clear_idle_timer();
347− self.handle_idle_timeout();
349− #[cfg(feature = "integration")]
319+ #[cfg(feature = "integration")]
351− log::debug!("idle handled");
321+ if _idle_handled {
352− idle_handled = true;
322+ return true;
359− // for integration tests only, reset the idle timer after every
325+ self.editor.reset_idle_timer();
360− // event to signal when test events are done processing
326+ }
361− #[cfg(feature = "integration")]
367− self.editor.reset_idle_timer();
@@ -517,6 +477,49 @@ impl Application {
481+ pub async fn handle_editor_event(&mut self, event: EditorEvent) -> bool {
482+ log::debug!("received editor event: {:?}", event);
485+ EditorEvent::DocumentSave(event) => {
486+ self.handle_document_write(event);
489+ EditorEvent::ConfigEvent(event) => {
490+ self.handle_config_events(event);
493+ EditorEvent::LanguageServerMessage((id, call)) => {
494+ self.handle_language_server_message(call, id).await;
495+ // limit render calls for fast language server messages
496+ let last = self.editor.language_servers.incoming.is_empty();
498+ if last || self.last_render.elapsed() > LSP_DEADLINE {
500+ self.last_render = Instant::now();
503+ EditorEvent::DebuggerEvent(payload) => {
504+ let needs_render = self.editor.handle_debugger_message(payload).await;
509+ EditorEvent::IdleTimer => {
510+ self.editor.clear_idle_timer();
511+ self.handle_idle_timeout();
513+ #[cfg(feature = "integration")]
520 pub fn handle_terminal_events(&mut self, event: Result<CrosstermEvent, crossterm::ErrorKind>) {
523 pub fn handle_terminal_events(&mut self, event: Result<CrosstermEvent, crossterm::ErrorKind>) {
521 let mut cx = crate::compositor::Context {
524 let mut cx = crate::compositor::Context {
522 editor: &mut self.editor,
525 editor: &mut self.editor,