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.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs index 9c339a13e7..643f34b22e 100644 --- a/crates/ide-completion/src/render.rs +++ b/crates/ide-completion/src/render.rs @@ -14,7 +14,7 @@ use hir::{AsAssocItem, HasAttrs, HirDisplay, ScopeDef}; use ide_db::{ helpers::item_name, imports::import_assets::LocatedImport, RootDatabase, SnippetCap, SymbolKind, }; -use syntax::{SmolStr, SyntaxKind, TextRange}; +use syntax::{AstNode, SmolStr, SyntaxKind, TextRange}; use crate::{ context::{PathCompletionCtx, PathKind}, @@ -167,7 +167,7 @@ pub(crate) fn render_resolution_simple( local_name: hir::Name, resolution: ScopeDef, ) -> Builder { - render_resolution_simple_(ctx, local_name, None, resolution) + render_resolution_simple_(ctx, None, local_name, None, resolution) } pub(crate) fn render_resolution_with_import( @@ -235,7 +235,8 @@ fn render_resolution_simple_type( let db = ctx.completion.db; let config = ctx.completion.config; let name = local_name.to_smol_str(); - let mut item = render_resolution_simple_(ctx, local_name, import_to_add, resolution); + let mut item = + render_resolution_simple_(ctx, Some(path_ctx), local_name, import_to_add, resolution); // Add `<>` for generic types let type_path_no_ty_args = matches!( path_ctx, @@ -264,6 +265,7 @@ fn render_resolution_simple_type( fn render_resolution_simple_( ctx: RenderContext<'_>, + path_ctx: Option<&PathCompletionCtx>, local_name: hir::Name, import_to_add: Option<LocatedImport>, resolution: ScopeDef, @@ -317,8 +319,10 @@ fn render_resolution_simple_( ..CompletionRelevance::default() }); - if let Some(ref_match) = compute_ref_match(ctx.completion, &ty) { - item.ref_match(ref_match); + if let Some(path_ctx) = path_ctx { + if let Some(ref_match) = compute_ref_match(ctx.completion, &ty) { + item.ref_match(ref_match, path_ctx.path.syntax().text_range().start()); + } } }; @@ -455,7 +459,7 @@ mod tests { let relevance = display_relevance(it.relevance()); items.push(format!("{} {} {}\n", tag, it.label(), relevance)); - if let Some((mutability, relevance)) = it.ref_match() { + if let Some((mutability, _offset, relevance)) = it.ref_match() { let label = format!("&{}{}", mutability.as_keyword_for_ref(), it.label()); let relevance = display_relevance(relevance); @@ -1495,7 +1499,7 @@ fn foo(f: Foo) { let _: &u32 = f.b$0 } "#, &[CompletionItemKind::Method, CompletionItemKind::SymbolKind(SymbolKind::Field)], // FIXME - // Ideally we'd also suggest &f.bar and &f.baz() as exact + // Ideally we'd also suggest &f.bar as exact // type matches. See #8058. expect![[r#" [ @@ -1507,6 +1511,7 @@ fn foo(f: Foo) { let _: &u32 = f.b$0 } kind: Method, lookup: "baz", detail: "fn(&self) -> u32", + ref_match: "&@96", }, CompletionItem { label: "bar", @@ -1525,7 +1530,6 @@ 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; @@ -1554,6 +1558,7 @@ fn main() { ), lookup: "foo", detail: "fn() -> S", + ref_match: "&@92", }, ] "#]], |