Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/render.rs')
-rw-r--r--crates/ide-completion/src/render.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs
index f559aae789..fcc81c3611 100644
--- a/crates/ide-completion/src/render.rs
+++ b/crates/ide-completion/src/render.rs
@@ -718,12 +718,13 @@ fn compute_ref_match(
ctx: &CompletionContext<'_, '_>,
completion_ty: &hir::Type<'_>,
) -> Option<CompletionItemRefMode> {
+ if compute_type_match(ctx, completion_ty).is_some() {
+ return None;
+ }
let expected_type = ctx.expected_type.as_ref()?;
let expected_without_ref = expected_type.as_reference();
let completion_without_ref = completion_ty.as_reference();
- if expected_type.could_unify_with(ctx.db, completion_ty) {
- return None;
- }
+
if let Some((expected_without_ref, _)) = &expected_without_ref
&& (completion_without_ref.is_none()
|| completion_ty.could_unify_with(ctx.db, expected_without_ref))
@@ -3175,6 +3176,24 @@ fn main() {
fn main() fn() []
"#]],
);
+ check_relevance(
+ r#"
+//- minicore: deref
+fn foo<T>(s: &T) {}
+fn main() {
+ let ssss = &mut 2i32;
+ foo($0);
+}
+ "#,
+ expect![[r#"
+ lc ssss &mut i32 [type_could_unify+local]
+ md core:: []
+ fn foo(…) fn(&T) []
+ fn &foo(…) [type]
+ fn main() fn() []
+ fn &main() [type]
+ "#]],
+ );
}
#[test]