11390: fix: Deprioritize ops function completions for non-method calls r=Veykril a=Veykril

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/10593
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
bors[bot] 2022-02-01 11:34:40 +00:00 committed by GitHub
commit 9b88956bd5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 9 deletions

View File

@ -1354,7 +1354,7 @@ fn main() {
}
#[test]
fn op_method_relevances() {
fn op_function_relevances() {
check_relevance(
r#"
#[lang = "sub"]
@ -1367,7 +1367,30 @@ fn foo(a: u32) { a.$0 }
expect![[r#"
me sub() (as Sub) [op_method]
"#]],
)
);
check_relevance(
r#"
struct Foo;
impl Foo {
fn new() -> Self {}
}
#[lang = "eq"]
pub trait PartialEq<Rhs: ?Sized = Self> {
fn eq(&self, other: &Rhs) -> bool;
fn ne(&self, other: &Rhs) -> bool;
}
impl PartialEq for Foo {}
fn main() {
Foo::$0
}
"#,
expect![[r#"
fn new() []
me eq() (as PartialEq) [op_method]
me ne() (as PartialEq) [op_method]
"#]],
);
}
#[test]

View File

@ -67,16 +67,14 @@ fn render(
);
let ret_type = func.ret_type(db);
let is_op_method = func
.as_assoc_item(ctx.db())
.and_then(|trait_| trait_.containing_trait_or_trait_impl(ctx.db()))
.map_or(false, |trait_| completion.is_ops_trait(trait_));
item.set_relevance(CompletionRelevance {
type_match: compute_type_match(completion, &ret_type),
exact_name_match: compute_exact_name_match(completion, &call),
is_op_method: match func_type {
FuncType::Method(_) => func
.as_assoc_item(ctx.db())
.and_then(|trait_| trait_.containing_trait_or_trait_impl(ctx.db()))
.map_or(false, |trait_| completion.is_ops_trait(trait_)),
_ => false,
},
is_op_method,
..CompletionRelevance::default()
});