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