Skip to content

Commit

Permalink
Merge pull request #19226 from Shourya742/2025-02-25-fix-completion-r…
Browse files Browse the repository at this point in the history
…ef-matching

completion-ref-matching
  • Loading branch information
ChayimFriedman2 authored Mar 3, 2025
2 parents 81ff38f + dcb25b1 commit 9e014a0
Showing 1 changed file with 25 additions and 3 deletions.
28 changes: 25 additions & 3 deletions crates/ide-completion/src/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -2007,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);
Expand Down

0 comments on commit 9e014a0

Please sign in to comment.