///
/// See is_relevant if you need to make some judgement about score
/// in an absolute sense.
- pub fn score(&self) -> u8 {
+ pub fn score(&self) -> u32 {
let mut score = 0;
if self.exact_name_match {
.map(|r| (r.score(), r))
.sorted_by_key(|(score, _r)| *score)
.fold(
- (u8::MIN, vec![vec![]]),
+ (u32::MIN, vec![vec![]]),
|(mut currently_collecting_score, mut out), (score, r)| {
if currently_collecting_score == score {
out.last_mut().unwrap().push(r);
}
// The relevance needs to be inverted to come up with a sort score
// because the client will sort ascending.
- let sort_score = relevance.score() ^ 0xFF;
- // Zero pad the string to ensure values are sorted numerically
- // even though the client is sorting alphabetically. Three
- // characters is enough to fit the largest u8, which is the
- // type of the relevance score.
- res.sort_text = Some(format!("{:03}", sort_score));
+ let sort_score = relevance.score() ^ 0xFF_FF_FF_FF;
+ // Zero pad the string to ensure values can be properly sorted
+ // by the client. Hex format is used because it is easier to
+ // visually compare very large values, which the sort text
+ // tends to be since it is the opposite of the score.
+ res.sort_text = Some(format!("{:08x}", sort_score));
}
set_score(&mut lsp_item, item.relevance());
(
"&arg",
Some(
- "253",
+ "fffffffd",
),
),
(
"arg",
Some(
- "254",
+ "fffffffe",
),
),
]