1
Fork 0

Merge pull request #19226 from Shourya742/2025-02-25-fix-completion-ref-matching

completion-ref-matching
This commit is contained in:
Chayim Refael Friedman 2025-03-03 02:37:00 +00:00 committed by GitHub
commit c6a7251c22
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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);
@ -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);