From 88e18230baf29a3844d7a126d21da803a9b2d097 Mon Sep 17 00:00:00 2001 From: Tongjun Gao Date: Fri, 7 Mar 2025 13:24:14 +0800 Subject: [PATCH 1/2] Fix logical error in relevance scoring implementation --- crates/ide-completion/src/item.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/ide-completion/src/item.rs b/crates/ide-completion/src/item.rs index ea52d69c79..294fbde1b6 100644 --- a/crates/ide-completion/src/item.rs +++ b/crates/ide-completion/src/item.rs @@ -252,14 +252,14 @@ impl CompletionRelevance { /// Provides a relevance score. Higher values are more relevant. /// /// The absolute value of the relevance score is not meaningful, for - /// example a value of 0 doesn't mean "not relevant", rather + /// example a value of (!(0 as u32) / 2) doesn't mean "not relevant", rather /// it means "least relevant". The score value should only be used /// for relative ordering. /// /// See is_relevant if you need to make some judgement about score /// in an absolute sense. pub fn score(self) -> u32 { - let mut score = !0 / 2; + let mut score = !(0 as u32) / 2; let CompletionRelevance { exact_name_match, type_match, @@ -350,7 +350,7 @@ impl CompletionRelevance { /// some threshold such that we think it is especially likely /// to be relevant. pub fn is_relevant(&self) -> bool { - self.score() > (!0 / 2) + self.score() > !(0 as u32) / 2 } } From 7d68c288738b73f71007225a7847c378af4c8671 Mon Sep 17 00:00:00 2001 From: Tongjun Gao Date: Fri, 7 Mar 2025 14:44:57 +0800 Subject: [PATCH 2/2] Refactor relevance scoring to use a named constant BASE_SCORE Replace magic number with a named constant for improved readability and maintainability of the scoring logic --- crates/ide-completion/src/item.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/ide-completion/src/item.rs b/crates/ide-completion/src/item.rs index 294fbde1b6..8d6dc4c801 100644 --- a/crates/ide-completion/src/item.rs +++ b/crates/ide-completion/src/item.rs @@ -252,14 +252,16 @@ impl CompletionRelevance { /// Provides a relevance score. Higher values are more relevant. /// /// The absolute value of the relevance score is not meaningful, for - /// example a value of (!(0 as u32) / 2) doesn't mean "not relevant", rather + /// example a value of BASE_SCORE doesn't mean "not relevant", rather /// it means "least relevant". The score value should only be used /// for relative ordering. /// /// See is_relevant if you need to make some judgement about score /// in an absolute sense. + const BASE_SCORE: u32 = u32::MAX / 2; + pub fn score(self) -> u32 { - let mut score = !(0 as u32) / 2; + let mut score = Self::BASE_SCORE; let CompletionRelevance { exact_name_match, type_match, @@ -350,7 +352,7 @@ impl CompletionRelevance { /// some threshold such that we think it is especially likely /// to be relevant. pub fn is_relevant(&self) -> bool { - self.score() > !(0 as u32) / 2 + self.score() > Self::BASE_SCORE } }