Skip to content

Commit

Permalink
Sort themes, language & files by score & then name (#2675)
Browse files Browse the repository at this point in the history
* Sort themes by score & then name

Previously the themes were appearing unordered after typing ':theme '.
This sorts them first by fuzzy score and then by name so that they
generally appear in a more ordered fashion in the initial list.

The sort by name does not really pay off when there is a score so an
alternative approach would be to sort by name if there is string to
fuzzy match against and otherwise sort by score.

I've lowercased the names as that avoids lower case & upper case letters
being sorted into separate groups. There might be a preferable approach
to that though.

* Sort language & files by score then name

And change to use sort_unstable_by instead of sort_unstable_by_key as it
allows us to avoid some allocations.

I don't fully understand the flow of the 'filename_impl' function but
this seems to deliver the desired results.

* Remove unnecessary reference

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
  • Loading branch information
michaeljones and the-mikedavis authored Jul 1, 2022
1 parent f10b6f6 commit d8abd1e
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions helix-term/src/ui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,9 @@ pub mod completers {
})
.collect();

matches.sort_unstable_by_key(|(_file, score)| Reverse(*score));
matches.sort_unstable_by(|(name1, score1), (name2, score2)| {
(Reverse(*score1), name1).cmp(&(Reverse(*score2), name2))
});
names = matches.into_iter().map(|(name, _)| ((0..), name)).collect();

names
Expand Down Expand Up @@ -312,7 +314,9 @@ pub mod completers {
})
.collect();

matches.sort_unstable_by_key(|(_language, score)| Reverse(*score));
matches.sort_unstable_by(|(language1, score1), (language2, score2)| {
(Reverse(*score1), language1).cmp(&(Reverse(*score2), language2))
});

matches
.into_iter()
Expand Down Expand Up @@ -428,13 +432,18 @@ pub mod completers {

let range = (input.len().saturating_sub(file_name.len()))..;

matches.sort_unstable_by_key(|(_file, score)| Reverse(*score));
matches.sort_unstable_by(|(file1, score1), (file2, score2)| {
(Reverse(*score1), file1).cmp(&(Reverse(*score2), file2))
});

files = matches
.into_iter()
.map(|(file, _)| (range.clone(), file))
.collect();

// TODO: complete to longest common match
} else {
files.sort_unstable_by(|(_, path1), (_, path2)| path1.cmp(path2));
}

files
Expand Down

0 comments on commit d8abd1e

Please sign in to comment.