diff --git a/crates/zeta/src/rate_completion_modal.rs b/crates/zeta/src/rate_completion_modal.rs index 73d65a18e3b745d824068ffc0556eb87c69b60bf..6dcafdc125f48ff3ceb70818f451a5fb91a397a2 100644 --- a/crates/zeta/src/rate_completion_modal.rs +++ b/crates/zeta/src/rate_completion_modal.rs @@ -491,27 +491,45 @@ impl Render for RateCompletionModal { let rated = self.zeta.read(cx).is_completion_rated(completion.id); + let (icon_name, icon_color, tooltip_text) = match (rated, completion.edits.is_empty()) { + (true, _) => (IconName::Check, Color::Success, "Rated Completion"), + (false, true) => (IconName::File, Color::Muted, "No Edits Produced"), + (false, false) => (IconName::FileDiff, Color::Accent, "Edits Available"), + }; + + let file_name = completion.path.file_name().map(|f| f.to_string_lossy().to_string()).unwrap_or("untitled".to_string()); + let file_path = completion.path.parent().map(|p| p.to_string_lossy().to_string()); + ListItem::new(completion.id) .inset(true) .spacing(ListItemSpacing::Sparse) .focused(index == self.selected_index) .toggle_state(selected) - .start_slot(if rated { - Icon::new(IconName::Check).color(Color::Success).size(IconSize::Small) - } else if completion.edits.is_empty() { - Icon::new(IconName::File).color(Color::Muted).size(IconSize::Small) - } else { - Icon::new(IconName::FileDiff).color(Color::Accent).size(IconSize::Small) - }) .child( - v_flex() - .pl_1p5() - .child(Label::new(completion.path.to_string_lossy().to_string()).size(LabelSize::Small)) - .child(Label::new(format!("{} ago, {:.2?}", format_time_ago(completion.response_received_at.elapsed()), completion.latency())) - .color(Color::Muted) - .size(LabelSize::XSmall) + h_flex() + .id("completion-content") + .gap_3() + .child( + Icon::new(icon_name) + .color(icon_color) + .size(IconSize::Small) + ) + .child( + v_flex() + .child( + h_flex().gap_1() + .child(Label::new(file_name).size(LabelSize::Small)) + .when_some(file_path, |this, p| this.child(Label::new(p).size(LabelSize::Small).color(Color::Muted))) + ) + .child(Label::new(format!("{} ago, {:.2?}", format_time_ago(completion.response_received_at.elapsed()), completion.latency())) + .color(Color::Muted) + .size(LabelSize::XSmall) + ) ) ) + .tooltip(move |cx| { + Tooltip::text(tooltip_text, cx) + }) .on_click(cx.listener(move |this, _, cx| { this.select_completion(Some(completion.clone()), true, cx); })) diff --git a/crates/zeta/src/zeta.rs b/crates/zeta/src/zeta.rs index 7c74d1f716ff293c4a65da2b6b084d0f9b07e3d8..e7f61a9309d3358fde5c3c8c68adf4f22261730c 100644 --- a/crates/zeta/src/zeta.rs +++ b/crates/zeta/src/zeta.rs @@ -293,7 +293,7 @@ impl Zeta { let events = self.events.clone(); let path = snapshot .file() - .map(|f| f.path().clone()) + .map(|f| Arc::from(f.full_path(cx).as_path())) .unwrap_or_else(|| Arc::from(Path::new("untitled"))); let client = self.client.clone();