Deprioritize ops function completions for non-method calls

This commit is contained in:
Lukas Wirth 2022-02-01 12:33:55 +01:00
parent 4800c05a20
commit fcdced115e
2 changed files with 30 additions and 9 deletions

View File

@ -1354,7 +1354,7 @@ fn foo(…) []
}
#[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()
});