From 09315ef3191019e482540a17287c127702fd2126 Mon Sep 17 00:00:00 2001 From: bit-aloo Date: Wed, 26 Feb 2025 20:24:37 +0530 Subject: [PATCH 1/2] Avoid suggesting redundant borrowing in completion results --- crates/ide-completion/src/render.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs index dc7eacbfbafd..d9f3fe132677 100644 --- a/crates/ide-completion/src/render.rs +++ b/crates/ide-completion/src/render.rs @@ -628,11 +628,9 @@ fn compute_ref_match( let expected_type = ctx.expected_type.as_ref()?; let expected_without_ref = expected_type.remove_ref(); let completion_without_ref = completion_ty.remove_ref(); - - if completion_ty == expected_type { + if expected_type.could_unify_with(ctx.db, completion_ty) { return None; } - if let Some(expected_without_ref) = &expected_without_ref { if completion_ty.autoderef(ctx.db).any(|ty| ty == *expected_without_ref) { cov_mark::hit!(suggest_ref); From dcb25b1a8c2993d9377fdcb4e86838383197df04 Mon Sep 17 00:00:00 2001 From: bit-aloo Date: Wed, 26 Feb 2025 22:19:22 +0530 Subject: [PATCH 2/2] add test --- crates/ide-completion/src/render.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs index d9f3fe132677..4f6c4cb66393 100644 --- a/crates/ide-completion/src/render.rs +++ b/crates/ide-completion/src/render.rs @@ -2005,6 +2005,30 @@ fn f() { ); } + #[test] + fn test_avoid_redundant_suggestion() { + check_relevance( + r#" +struct aa([u8]); + +impl aa { + fn from_bytes(bytes: &[u8]) -> &Self { + unsafe { &*(bytes as *const [u8] as *const aa) } + } +} + +fn bb()-> &'static aa { + let bytes = b"hello"; + aa::$0 +} +"#, + expect![[r#" + ex bb() [type] + fn from_bytes(…) fn(&[u8]) -> &aa [type_could_unify] + "#]], + ); + } + #[test] fn suggest_ref_mut() { cov_mark::check!(suggest_ref);