From c6932d1f51b5518161413638bc7ec477937a3c9d Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Tue, 10 Dec 2024 16:57:24 +0100 Subject: [PATCH] zeta: Add action to clear edit history (#21813) Co-Authored-by: Antonio Release Notes: - N/A --------- Co-authored-by: Antonio --- .../zed/src/zed/inline_completion_registry.rs | 17 +++++++++++++++-- crates/zeta/src/zeta.rs | 8 +++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/crates/zed/src/zed/inline_completion_registry.rs b/crates/zed/src/zed/inline_completion_registry.rs index 34bd4d67b9dfd9a0bd40eae82488487a78cc3dae..d32f5516d45122e32472c0063900cceb42b01f2d 100644 --- a/crates/zed/src/zed/inline_completion_registry.rs +++ b/crates/zed/src/zed/inline_completion_registry.rs @@ -49,12 +49,19 @@ pub fn init(client: Arc, cx: &mut AppContext) { }); } + if cx.has_flag::() { + cx.on_action(clear_zeta_edit_history); + } + cx.observe_flag::({ let editors = editors.clone(); let client = client.clone(); - move |_flag, cx| { + move |active, cx| { let provider = all_language_settings(None, cx).inline_completions.provider; - assign_inline_completion_providers(&editors, provider, &client, cx) + assign_inline_completion_providers(&editors, provider, &client, cx); + if active && !cx.is_action_available(&zeta::ClearHistory) { + cx.on_action(clear_zeta_edit_history); + } } }) .detach(); @@ -73,6 +80,12 @@ pub fn init(client: Arc, cx: &mut AppContext) { .detach(); } +fn clear_zeta_edit_history(_: &zeta::ClearHistory, cx: &mut AppContext) { + if let Some(zeta) = zeta::Zeta::global(cx) { + zeta.update(cx, |zeta, _| zeta.clear_history()); + } +} + fn assign_inline_completion_providers( editors: &Rc, AnyWindowHandle>>>, provider: InlineCompletionProvider, diff --git a/crates/zeta/src/zeta.rs b/crates/zeta/src/zeta.rs index 0e94e4fb915cd9bf0af7b00a69ac8d8e1bbbd68d..ed1dcdbeb27a9e6e24549a1ebb48de79eca721d2 100644 --- a/crates/zeta/src/zeta.rs +++ b/crates/zeta/src/zeta.rs @@ -6,7 +6,7 @@ use anyhow::{anyhow, Context as _, Result}; use client::Client; use collections::{HashMap, HashSet, VecDeque}; use futures::AsyncReadExt; -use gpui::{AppContext, Context, Global, Model, ModelContext, Subscription, Task}; +use gpui::{actions, AppContext, Context, Global, Model, ModelContext, Subscription, Task}; use http_client::{HttpClient, Method}; use language::{ language_settings::all_language_settings, Anchor, Buffer, BufferSnapshot, OffsetRangeExt, @@ -34,6 +34,8 @@ const EDITABLE_REGION_START_MARKER: &'static str = "<|editable_region_start|>"; const EDITABLE_REGION_END_MARKER: &'static str = "<|editable_region_end|>"; const BUFFER_CHANGE_GROUPING_INTERVAL: Duration = Duration::from_secs(1); +actions!(zeta, [ClearHistory]); + #[derive(Copy, Clone, Default, Debug, PartialEq, Eq, Hash)] pub struct InlineCompletionId(Uuid); @@ -155,6 +157,10 @@ impl Zeta { }) } + pub fn clear_history(&mut self) { + self.events.clear(); + } + fn new(client: Arc, cx: &mut ModelContext) -> Self { let refresh_llm_token_listener = language_models::RefreshLlmTokenListener::global(cx);