@@ -257,7 +257,9 @@ pub mod completers {
258 .collect();
258 .collect();
260− matches.sort_unstable_by_key(|(_file, score)| Reverse(*score));
260+ matches.sort_unstable_by(|(name1, score1), (name2, score2)| {
261+ (Reverse(*score1), name1).cmp(&(Reverse(*score2), name2))
261 names = matches.into_iter().map(|(name, _)| ((0..), name)).collect();
263 names = matches.into_iter().map(|(name, _)| ((0..), name)).collect();
@@ -312,7 +314,9 @@ pub mod completers {
313 .collect();
315 .collect();
315− matches.sort_unstable_by_key(|(_language, score)| Reverse(*score));
317+ matches.sort_unstable_by(|(language1, score1), (language2, score2)| {
318+ (Reverse(*score1), language1).cmp(&(Reverse(*score2), language2))
318 .into_iter()
322 .into_iter()
@@ -428,13 +432,18 @@ pub mod completers {
429 let range = (input.len().saturating_sub(file_name.len()))..;
433 let range = (input.len().saturating_sub(file_name.len()))..;
431− matches.sort_unstable_by_key(|(_file, score)| Reverse(*score));
435+ matches.sort_unstable_by(|(file1, score1), (file2, score2)| {
436+ (Reverse(*score1), file1).cmp(&(Reverse(*score2), file2))
432 files = matches
439 files = matches
433 .into_iter()
440 .into_iter()
434 .map(|(file, _)| (range.clone(), file))
441 .map(|(file, _)| (range.clone(), file))
435 .collect();
442 .collect();
437 // TODO: complete to longest common match
444 // TODO: complete to longest common match
446+ files.sort_unstable_by(|(_, path1), (_, path2)| path1.cmp(path2));