wip

HactarCE created

Change summary

crates/agent_ui/src/acp/completion_provider.rs            |  1 
crates/agent_ui/src/context_picker/completion_provider.rs |  1 
crates/agent_ui/src/slash_command.rs                      |  1 
crates/debugger_ui/src/session/running/console.rs         |  1 
crates/editor/src/actions.rs                              |  2 
crates/editor/src/editor.rs                               | 49 +++++++-
crates/inspector_ui/src/div_inspector.rs                  |  1 
crates/keymap_editor/src/keymap_editor.rs                 |  1 
8 files changed, 48 insertions(+), 9 deletions(-)

Detailed changes

crates/agent_ui/src/acp/completion_provider.rs 🔗

@@ -692,6 +692,7 @@ impl CompletionProvider for ContextPickerCompletionProvider {
         buffer: &Entity<Buffer>,
         buffer_position: Anchor,
         _trigger: CompletionContext,
+        _snippets_only: bool,
         _window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<CompletionResponse>>> {

crates/agent_ui/src/context_picker/completion_provider.rs 🔗

@@ -749,6 +749,7 @@ impl CompletionProvider for ContextPickerCompletionProvider {
         buffer: &Entity<Buffer>,
         buffer_position: Anchor,
         _trigger: CompletionContext,
+        _snippets_only: bool,
         _window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<CompletionResponse>>> {

crates/agent_ui/src/slash_command.rs 🔗

@@ -263,6 +263,7 @@ impl CompletionProvider for SlashCommandCompletionProvider {
         buffer: &Entity<Buffer>,
         buffer_position: Anchor,
         _: editor::CompletionContext,
+        _snippets_only: bool,
         window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<project::CompletionResponse>>> {

crates/debugger_ui/src/session/running/console.rs 🔗

@@ -521,6 +521,7 @@ impl CompletionProvider for ConsoleQueryBarCompletionProvider {
         buffer: &Entity<Buffer>,
         buffer_position: language::Anchor,
         _trigger: editor::CompletionContext,
+        _snippets_only: bool,
         _window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<CompletionResponse>>> {

crates/editor/src/actions.rs 🔗

@@ -220,6 +220,8 @@ pub struct ExpandExcerptsDown {
 pub struct ShowCompletions {
     #[serde(default)]
     pub(super) trigger: Option<String>,
+    #[serde(default)]
+    pub(super) snippets_only: bool,
 }
 
 /// Handles text input in the editor.

crates/editor/src/editor.rs 🔗

@@ -3136,7 +3136,14 @@ impl Editor {
                 };
 
                 if continue_showing {
-                    self.show_completions(&ShowCompletions { trigger: None }, window, cx);
+                    self.show_completions(
+                        &ShowCompletions {
+                            trigger: None,
+                            snippets_only: false,
+                        },
+                        window,
+                        cx,
+                    );
                 } else {
                     self.hide_context_menu(window, cx);
                 }
@@ -4940,6 +4947,7 @@ impl Editor {
         window: &mut Window,
         cx: &mut Context<Self>,
     ) {
+        dbg!(&text);
         let completions_source = self
             .context_menu
             .borrow()
@@ -4956,27 +4964,28 @@ impl Editor {
                         ignore_threshold: false,
                     }),
                     None,
+                    false,
                     window,
                     cx,
                 );
             }
             Some(CompletionsMenuSource::Normal)
             | Some(CompletionsMenuSource::SnippetChoices)
-            | None
-                if self.is_completion_trigger(
+            | None => {
+                let snippets_only = !self.is_completion_trigger(
                     text,
                     trigger_in_words,
                     completions_source.is_some(),
                     cx,
-                ) =>
-            {
+                );
                 self.show_completions(
                     &ShowCompletions {
                         trigger: Some(text.to_owned()).filter(|x| !x.is_empty()),
+                        snippets_only,
                     },
                     window,
                     cx,
-                )
+                );
             }
             _ => {
                 self.hide_context_menu(window, cx);
@@ -5474,6 +5483,7 @@ impl Editor {
                 ignore_threshold: true,
             }),
             None,
+            false,
             window,
             cx,
         );
@@ -5485,13 +5495,20 @@ impl Editor {
         window: &mut Window,
         cx: &mut Context<Self>,
     ) {
-        self.open_or_update_completions_menu(None, options.trigger.as_deref(), window, cx);
+        self.open_or_update_completions_menu(
+            None,
+            options.trigger.as_deref(),
+            options.snippets_only,
+            window,
+            cx,
+        );
     }
 
     fn open_or_update_completions_menu(
         &mut self,
         requested_source: Option<CompletionsMenuSource>,
         trigger: Option<&str>,
+        snippets_only: bool,
         window: &mut Window,
         cx: &mut Context<Self>,
     ) {
@@ -5673,6 +5690,7 @@ impl Editor {
                     &buffer,
                     buffer_position,
                     completion_context,
+                    snippets_only,
                     window,
                     cx,
                 );
@@ -6105,7 +6123,14 @@ impl Editor {
             .as_ref()
             .is_some_and(|confirm| confirm(intent, window, cx));
         if show_new_completions_on_confirm {
-            self.show_completions(&ShowCompletions { trigger: None }, window, cx);
+            self.show_completions(
+                &ShowCompletions {
+                    trigger: None,
+                    snippets_only: false,
+                },
+                window,
+                cx,
+            );
         }
 
         let provider = self.completion_provider.as_ref()?;
@@ -22815,6 +22840,7 @@ pub trait CompletionProvider {
         buffer: &Entity<Buffer>,
         buffer_position: text::Anchor,
         trigger: CompletionContext,
+        snippets_only: bool,
         window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<CompletionResponse>>>;
@@ -23189,6 +23215,7 @@ impl CompletionProvider for Entity<Project> {
         buffer: &Entity<Buffer>,
         buffer_position: text::Anchor,
         options: CompletionContext,
+        snippets_only: bool,
         _window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<CompletionResponse>>> {
@@ -23196,7 +23223,11 @@ impl CompletionProvider for Entity<Project> {
             let snippets = snippet_completions(project, buffer, buffer_position, cx);
             let project_completions = project.completions(buffer, buffer_position, options, cx);
             cx.background_spawn(async move {
-                let mut responses = project_completions.await?;
+                let mut responses = if snippets_only {
+                    Vec::new()
+                } else {
+                    project_completions.await?
+                };
                 let snippets = snippets.await?;
                 if !snippets.completions.is_empty() {
                     responses.push(snippets);

crates/inspector_ui/src/div_inspector.rs 🔗

@@ -645,6 +645,7 @@ impl CompletionProvider for RustStyleCompletionProvider {
         buffer: &Entity<Buffer>,
         position: Anchor,
         _: editor::CompletionContext,
+        _snippets_only: bool,
         _window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> Task<Result<Vec<CompletionResponse>>> {

crates/keymap_editor/src/keymap_editor.rs 🔗

@@ -2904,6 +2904,7 @@ impl CompletionProvider for KeyContextCompletionProvider {
         buffer: &Entity<language::Buffer>,
         buffer_position: language::Anchor,
         _trigger: editor::CompletionContext,
+        _snippets_only: bool,
         _window: &mut Window,
         cx: &mut Context<Editor>,
     ) -> gpui::Task<anyhow::Result<Vec<project::CompletionResponse>>> {