Change summary
crates/multi_buffer/src/multi_buffer.rs | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
Detailed changes
@@ -6847,18 +6847,23 @@ impl MultiBufferSnapshot {
}
fn excerpt_locator_for_id(&self, id: ExcerptId) -> &Locator {
+ self.try_excerpt_locator_for_id(id)
+ .unwrap_or_else(|| panic!("invalid excerpt id {id:?}"))
+ }
+
+ fn try_excerpt_locator_for_id(&self, id: ExcerptId) -> Option<&Locator> {
if id == ExcerptId::min() {
- Locator::min_ref()
+ Some(Locator::min_ref())
} else if id == ExcerptId::max() {
- Locator::max_ref()
+ Some(Locator::max_ref())
} else {
let (_, _, item) = self.excerpt_ids.find::<ExcerptId, _>((), &id, Bias::Left);
if let Some(entry) = item
&& entry.id == id
{
- return &entry.locator;
+ return Some(&entry.locator);
}
- panic!("invalid excerpt id {id:?}")
+ None
}
}
@@ -6944,7 +6949,7 @@ impl MultiBufferSnapshot {
fn excerpt(&self, excerpt_id: ExcerptId) -> Option<&Excerpt> {
let excerpt_id = self.latest_excerpt_id(excerpt_id);
let mut cursor = self.excerpts.cursor::<Option<&Locator>>(());
- let locator = self.excerpt_locator_for_id(excerpt_id);
+ let locator = self.try_excerpt_locator_for_id(excerpt_id)?;
cursor.seek(&Some(locator), Bias::Left);
if let Some(excerpt) = cursor.item()
&& excerpt.id == excerpt_id