diff --git a/crates/multi_buffer/src/path_key.rs b/crates/multi_buffer/src/path_key.rs index 5c2123d0f9c1b09c16fd99531973df81c45140f7..7302871abccf5768d6c9610aa0426c7387ac0b3a 100644 --- a/crates/multi_buffer/src/path_key.rs +++ b/crates/multi_buffer/src/path_key.rs @@ -607,7 +607,7 @@ impl MultiBuffer { DiffChangeKind::BufferEdited, ); if !edits.is_empty() { - self.subscriptions.publish(edits); + self.publish_edits(edits); } cx.emit(Event::Edited { @@ -691,7 +691,7 @@ impl MultiBuffer { let edits = Self::sync_diff_transforms(&mut snapshot, vec![edit], DiffChangeKind::BufferEdited); if !edits.is_empty() { - self.subscriptions.publish(edits); + self.publish_edits(edits); } cx.emit(Event::Edited { @@ -700,4 +700,21 @@ impl MultiBuffer { }); cx.notify(); } + + fn publish_edits(&mut self, edits: Vec>) { + if cfg!(debug_assertions) { + let snapshot = self.snapshot.get_mut(); + for edit in &edits { + if edit.new.start > snapshot.len() || edit.new.end > snapshot.len() { + panic!( + "edit range ({:?}) exceeds snapshot len ({})", + edit.new, + snapshot.len() + ); + } + } + } + + self.subscriptions.publish(edits); + } }