mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
implement function completion scoring
This commit is contained in:
parent
5f6d71cf0c
commit
db8bcf132c
2 changed files with 76 additions and 1 deletions
|
@ -5,7 +5,7 @@ use ide_db::SymbolKind;
|
|||
use syntax::ast::Fn;
|
||||
|
||||
use crate::{
|
||||
item::{CompletionItem, CompletionItemKind, CompletionKind, ImportEdit},
|
||||
item::{CompletionItem, CompletionItemKind, CompletionKind, CompletionRelevance, ImportEdit},
|
||||
render::{builder_ext::Params, RenderContext},
|
||||
};
|
||||
|
||||
|
@ -55,6 +55,21 @@ impl<'a> FunctionRender<'a> {
|
|||
.add_call_parens(self.ctx.completion, self.name, params)
|
||||
.add_import(import_to_add);
|
||||
|
||||
let mut relevance = CompletionRelevance::default();
|
||||
if let Some(expected_type) = &self.ctx.completion.expected_type {
|
||||
let ret_ty = self.func.ret_type(self.ctx.db());
|
||||
|
||||
// We don't ever consider a function which returns unit type to be an
|
||||
// exact type match, since nearly always this is not meaningful to the
|
||||
// user.
|
||||
relevance.exact_type_match = &ret_ty == expected_type && !ret_ty.is_unit();
|
||||
}
|
||||
if let Some(expected_name) = &self.ctx.completion.expected_name {
|
||||
relevance.exact_name_match =
|
||||
expected_name == &self.func.name(self.ctx.db()).to_string();
|
||||
}
|
||||
item.set_relevance(relevance);
|
||||
|
||||
item.build()
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue