Return last excerpt in MultiBuffer::excerpt_containing if overshooting

Antonio Scandurra created

Change summary

crates/editor/src/multi_buffer.rs | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)

Detailed changes

crates/editor/src/multi_buffer.rs 🔗

@@ -1082,18 +1082,21 @@ impl MultiBuffer {
 
         let mut cursor = snapshot.excerpts.cursor::<usize>();
         cursor.seek(&position, Bias::Right, &());
-        cursor.item().map(|excerpt| {
-            (
-                excerpt.id.clone(),
-                self.buffers
-                    .borrow()
-                    .get(&excerpt.buffer_id)
-                    .unwrap()
-                    .buffer
-                    .clone(),
-                excerpt.range.context.clone(),
-            )
-        })
+        cursor
+            .item()
+            .or_else(|| snapshot.excerpts.last())
+            .map(|excerpt| {
+                (
+                    excerpt.id.clone(),
+                    self.buffers
+                        .borrow()
+                        .get(&excerpt.buffer_id)
+                        .unwrap()
+                        .buffer
+                        .clone(),
+                    excerpt.range.context.clone(),
+                )
+            })
     }
 
     // If point is at the end of the buffer, the last excerpt is returned