From f917b5a441ff3ae582358b6939ffbf889f4aa530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Tue, 10 Aug 2021 11:19:07 +0900 Subject: [PATCH] ui: completion: Use sort_text to sort the completions --- helix-term/src/ui/completion.rs | 4 ++++ helix-term/src/ui/menu.rs | 27 +++++++++++---------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs index 2725d53de..f359e7ec4 100644 --- a/helix-term/src/ui/completion.rs +++ b/helix-term/src/ui/completion.rs @@ -14,6 +14,10 @@ use lsp::CompletionItem; impl menu::Item for CompletionItem { + fn sort_text(&self) -> &str { + self.filter_text.as_ref().unwrap_or(&self.label).as_str() + } + fn filter_text(&self) -> &str { self.filter_text.as_ref().unwrap_or(&self.label).as_str() } diff --git a/helix-term/src/ui/menu.rs b/helix-term/src/ui/menu.rs index 1e1c54272..26eff1d8e 100644 --- a/helix-term/src/ui/menu.rs +++ b/helix-term/src/ui/menu.rs @@ -11,7 +11,7 @@ use tui::layout::Constraint; pub trait Item { - // TODO: sort_text + fn sort_text(&self) -> &str; fn filter_text(&self) -> &str; fn label(&self) -> &str; @@ -64,24 +64,21 @@ pub fn score(&mut self, pattern: &str) { let Self { ref mut matcher, ref mut matches, + ref options, .. } = *self; // reuse the matches allocation matches.clear(); - matches.extend( - self.options - .iter() - .enumerate() - .filter_map(|(index, option)| { - let text = option.filter_text(); - // TODO: using fuzzy_indices could give us the char idx for match highlighting - matcher - .fuzzy_match(text, pattern) - .map(|score| (index, score)) - }), - ); - matches.sort_unstable_by_key(|(_, score)| -score); + matches.extend(options.iter().enumerate().filter_map(|(index, option)| { + let text = option.filter_text(); + // TODO: using fuzzy_indices could give us the char idx for match highlighting + matcher + .fuzzy_match(text, pattern) + .map(|score| (index, score)) + })); + // matches.sort_unstable_by_key(|(_, score)| -score); + matches.sort_unstable_by_key(|(index, _score)| options[*index].sort_text()); // reset cursor position self.cursor = None; @@ -223,8 +220,6 @@ fn handle_event(&mut self, event: Event, cx: &mut Context) -> EventResult { EventResult::Ignored } - // TODO: completion sorting - fn required_size(&mut self, viewport: (u16, u16)) -> Option<(u16, u16)> { let n = self .options