Log error instead of panics in InlineAssistant::scroll_to_assist (#32519)

Leaving release notes blank as it's not very actionable to know that a
rare crash might be fixed.

Release Notes:

- N/A
This commit is contained in:
Michael Sloan 2025-06-11 00:22:12 -06:00 committed by GitHub
parent 6c0ea88f5b
commit 5b22994d9f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -38,8 +38,7 @@ use telemetry_events::{AssistantEventData, AssistantKind, AssistantPhase};
use terminal_view::{TerminalView, terminal_panel::TerminalPanel}; use terminal_view::{TerminalView, terminal_panel::TerminalPanel};
use text::{OffsetRangeExt, ToPoint as _}; use text::{OffsetRangeExt, ToPoint as _};
use ui::prelude::*; use ui::prelude::*;
use util::RangeExt; use util::{RangeExt, ResultExt, maybe};
use util::ResultExt;
use workspace::{ItemHandle, Toast, Workspace, dock::Panel, notifications::NotificationId}; use workspace::{ItemHandle, Toast, Workspace, dock::Panel, notifications::NotificationId};
use zed_actions::agent::OpenConfiguration; use zed_actions::agent::OpenConfiguration;
@ -1171,27 +1170,31 @@ impl InlineAssistant {
selections.select_anchor_ranges([position..position]) selections.select_anchor_ranges([position..position])
}); });
let mut scroll_target_top; let mut scroll_target_range = None;
let mut scroll_target_bottom;
if let Some(decorations) = assist.decorations.as_ref() { if let Some(decorations) = assist.decorations.as_ref() {
scroll_target_top = editor scroll_target_range = maybe!({
.row_for_block(decorations.prompt_block_id, cx) let top = editor.row_for_block(decorations.prompt_block_id, cx)?.0 as f32;
.unwrap() let bottom = editor.row_for_block(decorations.end_block_id, cx)?.0 as f32;
.0 as f32; Some((top, bottom))
scroll_target_bottom = editor });
.row_for_block(decorations.end_block_id, cx) if scroll_target_range.is_none() {
.unwrap() log::error!("bug: failed to find blocks for scrolling to inline assist");
.0 as f32; }
} else { }
let scroll_target_range = scroll_target_range.unwrap_or_else(|| {
let snapshot = editor.snapshot(window, cx); let snapshot = editor.snapshot(window, cx);
let start_row = assist let start_row = assist
.range .range
.start .start
.to_display_point(&snapshot.display_snapshot) .to_display_point(&snapshot.display_snapshot)
.row(); .row();
scroll_target_top = start_row.0 as f32; let top = start_row.0 as f32;
scroll_target_bottom = scroll_target_top + 1.; let bottom = top + 1.0;
} (top, bottom)
});
let mut scroll_target_top = scroll_target_range.0;
let mut scroll_target_bottom = scroll_target_range.1;
scroll_target_top -= editor.vertical_scroll_margin() as f32; scroll_target_top -= editor.vertical_scroll_margin() as f32;
scroll_target_bottom += editor.vertical_scroll_margin() as f32; scroll_target_bottom += editor.vertical_scroll_margin() as f32;