Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/item.rs')
-rw-r--r--crates/ide-completion/src/item.rs58
1 files changed, 35 insertions, 23 deletions
diff --git a/crates/ide-completion/src/item.rs b/crates/ide-completion/src/item.rs
index f54c8dd8b0..61281f8cfb 100644
--- a/crates/ide-completion/src/item.rs
+++ b/crates/ide-completion/src/item.rs
@@ -304,19 +304,19 @@ impl CompletionRelevance {
// only applicable for completions within use items
// lower rank for conflicting import names
if is_name_already_imported {
- score -= 1;
+ score -= 15;
}
// slightly prefer locals
if is_local {
- score += 1;
+ score += 2;
}
if is_missing {
- score += 1;
+ score += 2;
}
// lower rank private things
if !is_private_editable {
- score += 1;
+ score += 10;
}
if let Some(trait_) = trait_ {
@@ -337,10 +337,10 @@ impl CompletionRelevance {
// lower rank for items that need an import
if requires_import {
- score -= 1;
+ score -= 12;
}
if exact_name_match {
- score += 20;
+ score += 40;
}
match postfix_match {
Some(CompletionRelevancePostfixMatch::Exact) => score += 100,
@@ -348,16 +348,26 @@ impl CompletionRelevance {
None => (),
};
score += match type_match {
- Some(CompletionRelevanceTypeMatch::Exact) => 18,
- Some(CompletionRelevanceTypeMatch::CouldUnify) => 5,
+ Some(CompletionRelevanceTypeMatch::Exact) => 35,
+ Some(CompletionRelevanceTypeMatch::CouldUnify) => 15,
None => 0,
};
if let Some(function) = function {
- let mut fn_score = match function.return_type {
- CompletionRelevanceReturnType::DirectConstructor => 15,
- CompletionRelevanceReturnType::Builder => 10,
- CompletionRelevanceReturnType::Constructor => 5,
- CompletionRelevanceReturnType::Other => 0u32,
+ let mut fn_score = if requires_import {
+ // Rank constructors that require imports lower than those who don't.
+ match function.return_type {
+ CompletionRelevanceReturnType::DirectConstructor => 8,
+ CompletionRelevanceReturnType::Builder => 5,
+ CompletionRelevanceReturnType::Constructor => 3,
+ CompletionRelevanceReturnType::Other => 0u32,
+ }
+ } else {
+ match function.return_type {
+ CompletionRelevanceReturnType::DirectConstructor => 15,
+ CompletionRelevanceReturnType::Builder => 10,
+ CompletionRelevanceReturnType::Constructor => 5,
+ CompletionRelevanceReturnType::Other => 0u32,
+ }
};
// When a fn is bumped due to return type:
@@ -375,12 +385,12 @@ impl CompletionRelevance {
};
if has_local_inherent_impl {
- score -= 5;
+ score -= 8;
}
// lower rank for deprecated items
if is_deprecated {
- score -= 5;
+ score -= 15;
}
score
@@ -831,15 +841,17 @@ mod tests {
is_private_editable: true,
..default
}],
- vec![Cr {
- trait_: Some(crate::item::CompletionRelevanceTraitInfo {
- notable_trait: false,
- is_op_method: true,
- }),
- ..default
- }],
+ vec![
+ Cr {
+ trait_: Some(crate::item::CompletionRelevanceTraitInfo {
+ notable_trait: false,
+ is_op_method: true,
+ }),
+ ..default
+ },
+ Cr { is_private_editable: true, ..default },
+ ],
vec![Cr { postfix_match: Some(CompletionRelevancePostfixMatch::NonExact), ..default }],
- vec![Cr { is_private_editable: true, ..default }],
vec![default],
vec![Cr { is_local: true, ..default }],
vec![Cr { type_match: Some(CompletionRelevanceTypeMatch::CouldUnify), ..default }],