Skip to content

Commit

Permalink
feat(lsp): LSP preselected items appear first in completion menu (#4480)
Browse files Browse the repository at this point in the history
* feat(lsp): LSP preselected items appear first in completion menu

* fix: shorter diff
  • Loading branch information
lazytanuki authored Oct 27, 2022
1 parent b1ffbbd commit b4a3dd8
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
6 changes: 5 additions & 1 deletion helix-term/src/ui/completion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,15 @@ impl Completion {

pub fn new(
editor: &Editor,
items: Vec<CompletionItem>,
mut items: Vec<CompletionItem>,
offset_encoding: helix_lsp::OffsetEncoding,
start_offset: usize,
trigger_offset: usize,
) -> Self {
// Sort completion items according to their preselect status (given by the LSP server)
items.sort_by_key(|item| !item.preselect.unwrap_or(false));

// Then create the menu
let menu = Menu::new(items, (), move |editor: &mut Editor, item, event| {
fn item_to_transaction(
doc: &Document,
Expand Down
3 changes: 2 additions & 1 deletion helix-term/src/ui/menu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ impl<T: Item> Menu<T> {
.map(|score| (index, score))
}),
);
self.matches.sort_unstable_by_key(|(_, score)| -score);
// Order of equal elements needs to be preserved as LSP preselected items come in order of high to low priority
self.matches.sort_by_key(|(_, score)| -score);

// reset cursor position
self.cursor = None;
Expand Down

0 comments on commit b4a3dd8

Please sign in to comment.