From 37d54d848210cae4515b08693ddbb4d620416c88 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 19 Feb 2026 09:39:20 +0100 Subject: [PATCH] multi_buffer: Bring `update_path_excerpts` ordering workaround back (#49563) cc https://github.com/zed-industries/zed/pull/49290 Release Notes: - N/A *or* Added/Fixed/Improved ... --- crates/multi_buffer/src/path_key.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/crates/multi_buffer/src/path_key.rs b/crates/multi_buffer/src/path_key.rs index 9da791ccafa7472e1e6b9716812a2cd51961e6f7..464c30aee1d40b380cea27d960bfc3c4ea106617 100644 --- a/crates/multi_buffer/src/path_key.rs +++ b/crates/multi_buffer/src/path_key.rs @@ -554,16 +554,25 @@ impl MultiBuffer { } self.insert_excerpts_with_ids_after(insert_after, buffer, to_insert, cx); + // todo(lw): There is a logic bug somewhere that causes the to_remove vector to be not ordered correctly + to_remove.sort_by_cached_key(|&id| snapshot.excerpt_locator_for_id(id)); self.remove_excerpts(to_remove, cx); if excerpt_ids.is_empty() { self.excerpts_by_path.remove(&path); } else { - for excerpt_id in &excerpt_ids { - self.paths_by_excerpt.insert(*excerpt_id, path.clone()); + let snapshot = &*self.snapshot.get_mut(); + let excerpt_ids = excerpt_ids + .iter() + .dedup() + .cloned() + // todo(lw): There is a logic bug somewhere that causes excerpt_ids to not necessarily be in order by locator + .sorted_by_cached_key(|&id| snapshot.excerpt_locator_for_id(id)) + .collect(); + for &excerpt_id in &excerpt_ids { + self.paths_by_excerpt.insert(excerpt_id, path.clone()); } - self.excerpts_by_path - .insert(path, excerpt_ids.iter().dedup().cloned().collect()); + self.excerpts_by_path.insert(path, excerpt_ids); } (excerpt_ids, added_a_new_excerpt)