From cbcd011a36ee0dc0bfb53777c6dec3e6c68f714f Mon Sep 17 00:00:00 2001 From: Sai Gokula Krishnan Date: Thu, 29 Feb 2024 23:01:13 +0530 Subject: [PATCH] Improve matches on command palette (#8515) Release Notes: - Fixed consecutive spaces in command palette influencing selection. #8184 Optionally, include screenshots / media showcasing your addition that can be included in the release notes. https://github.com/zed-industries/zed/assets/25414681/a4682247-f52c-4ab9-a32a-51ab5cf3dbcc --- crates/command_palette/src/command_palette.rs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/crates/command_palette/src/command_palette.rs b/crates/command_palette/src/command_palette.rs index 632845bb77..197ad90586 100644 --- a/crates/command_palette/src/command_palette.rs +++ b/crates/command_palette/src/command_palette.rs @@ -37,6 +37,24 @@ pub struct CommandPalette { picker: View>, } +fn trim_consecutive_whitespaces(input: &str) -> String { + let mut result = String::with_capacity(input.len()); + let mut last_char_was_whitespace = false; + + for char in input.trim().chars() { + if char.is_whitespace() { + if !last_char_was_whitespace { + result.push(char); + } + last_char_was_whitespace = true; + } else { + result.push(char); + last_char_was_whitespace = false; + } + } + result +} + impl CommandPalette { fn register(workspace: &mut Workspace, _: &mut ViewContext) { workspace.register_action(|workspace, _: &Toggle, cx| { @@ -247,7 +265,7 @@ impl PickerDelegate for CommandPaletteDelegate { let mut commands = self.all_commands.clone(); let hit_counts = cx.global::().clone(); let executor = cx.background_executor().clone(); - let query = query.clone(); + let query = trim_consecutive_whitespaces(&query.as_str()); async move { commands.sort_by_key(|action| { ( @@ -265,7 +283,6 @@ impl PickerDelegate for CommandPaletteDelegate { char_bag: command.name.chars().collect(), }) .collect::>(); - let matches = if query.is_empty() { candidates .into_iter()