mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 09:27:27 +00:00
Deprioritize ops function completions for non-method calls
This commit is contained in:
parent
4800c05a20
commit
fcdced115e
2 changed files with 30 additions and 9 deletions
|
@ -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]
|
||||
|
|
|
@ -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()
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue