From eef3ccab01c94edbeafd72c30e9c49a22d6ae43e Mon Sep 17 00:00:00 2001 From: Filipe Azevedo Date: Fri, 25 Nov 2022 22:32:24 +0000 Subject: [PATCH] avoid reloading invalid views --- helix-term/src/commands/typed.rs | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 475f14d1de3c..98ea1c3aed80 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1049,20 +1049,28 @@ fn reload_all( let docs_view_ids: Vec<(DocumentId, Vec)> = cx .editor .documents_mut() - .map(|doc| { - let mut view_ids: Vec<_> = doc.selections().keys().cloned().collect(); - - if view_ids.is_empty() { - doc.ensure_view_init(view_id); - view_ids.push(view_id); - }; - - (doc.id(), view_ids) - }) + .map(|doc| (doc.id(), doc.selections().keys().cloned().collect())) .collect(); for (doc_id, view_ids) in docs_view_ids { + // Not using filter map here means we need to clone the id again since + // contains cant be called with a reference. + #[allow(clippy::unnecessary_filter_map)] + let mut view_ids: Vec = view_ids + .into_iter() + // TODO: This check can be removed once + // https://github.com/helix-editor/helix/pull/4888 is merged. + .filter_map(|id| match cx.editor.tree.contains(id) { + true => Some(id), + false => None, + }) + .collect(); + let doc = doc_mut!(cx.editor, &doc_id); + if view_ids.is_empty() { + doc.ensure_view_init(view_id); + view_ids.push(view_id); + }; // Every doc is guaranteed to have at least 1 view at this point. let view = view_mut!(cx.editor, view_ids[0]);