Update command matches faster

Conrad Irwin created

Change summary

crates/command_palette2/src/command_palette.rs | 11 +----------
crates/picker2/src/picker2.rs                  | 10 ++++++----
2 files changed, 7 insertions(+), 14 deletions(-)

Detailed changes

crates/command_palette2/src/command_palette.rs 🔗

@@ -130,16 +130,7 @@ impl CommandPaletteDelegate {
     ) -> Self {
         Self {
             command_palette,
-            matches: commands
-                .iter()
-                .enumerate()
-                .map(|(i, command)| StringMatch {
-                    candidate_id: i,
-                    string: command.name.clone(),
-                    positions: Vec::new(),
-                    score: 0.0,
-                })
-                .collect(),
+            matches: vec![],
             commands,
             selected_ix: 0,
             previous_focus_handle,

crates/picker2/src/picker2.rs 🔗

@@ -10,7 +10,7 @@ pub struct Picker<D: PickerDelegate> {
     pub delegate: D,
     scroll_handle: UniformListScrollHandle,
     editor: View<Editor>,
-    pending_update_matches: Option<Task<Option<()>>>,
+    pending_update_matches: Option<Task<()>>,
 }
 
 pub trait PickerDelegate: Sized + 'static {
@@ -42,12 +42,14 @@ impl<D: PickerDelegate> Picker<D> {
             editor
         });
         cx.subscribe(&editor, Self::on_input_editor_event).detach();
-        Self {
+        let mut this = Self {
             delegate,
             scroll_handle: UniformListScrollHandle::new(),
             pending_update_matches: None,
             editor,
-        }
+        };
+        this.update_matches("".to_string(), cx);
+        this
     }
 
     pub fn focus(&self, cx: &mut WindowContext) {
@@ -126,7 +128,7 @@ impl<D: PickerDelegate> Picker<D> {
             this.update(&mut cx, |this, cx| {
                 this.matches_updated(cx);
             })
-            .ok()
+            .ok();
         }));
     }