@@ -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;