From 9a427839fa14763fdeb438933cd0b1f4c32302c0 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sun, 27 Mar 2022 12:50:16 +0200 Subject: [PATCH] fix: Disable ref_match for qualified paths as well I.e. don't suggest `Foo::&foo()`. CC #8058. --- crates/ide_completion/src/render.rs | 37 ++++++++++++++++++++ crates/ide_completion/src/render/function.rs | 8 ++--- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/crates/ide_completion/src/render.rs b/crates/ide_completion/src/render.rs index 1850fd1aa85..604f2174471 100644 --- a/crates/ide_completion/src/render.rs +++ b/crates/ide_completion/src/render.rs @@ -1467,6 +1467,43 @@ fn foo(f: Foo) { let _: &u32 = f.b$0 } ); } + #[test] + fn qualified_path_ref() { + // disabled right now because it doesn't render correctly, #8058 + check_kinds( + r#" +struct S; + +struct T; +impl T { + fn foo() -> S {} +} + +fn bar(s: &S) {} + +fn main() { + bar(T::$0); +} +"#, + &[CompletionItemKind::SymbolKind(SymbolKind::Function)], + expect![[r#" + [ + CompletionItem { + label: "foo()", + source_range: 95..95, + delete: 95..95, + insert: "foo()$0", + kind: SymbolKind( + Function, + ), + lookup: "foo", + detail: "fn() -> S", + }, + ] + "#]], + ); + } + #[test] fn generic_enum() { check_relevance( diff --git a/crates/ide_completion/src/render/function.rs b/crates/ide_completion/src/render/function.rs index 7df13988ad6..85014717d6f 100644 --- a/crates/ide_completion/src/render/function.rs +++ b/crates/ide_completion/src/render/function.rs @@ -74,10 +74,10 @@ fn render( }); if let Some(ref_match) = compute_ref_match(completion, &ret_type) { - // FIXME - // For now we don't properly calculate the edits for ref match - // completions on methods, so we've disabled them. See #8058. - if matches!(func_kind, FuncKind::Function) { + // FIXME For now we don't properly calculate the edits for ref match + // completions on methods or qualified paths, so we've disabled them. + // See #8058. + if matches!(func_kind, FuncKind::Function) && ctx.completion.path_qual().is_none() { item.ref_match(ref_match); } }