Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/render/struct_literal.rs')
| -rw-r--r-- | crates/ide_completion/src/render/struct_literal.rs | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/crates/ide_completion/src/render/struct_literal.rs b/crates/ide_completion/src/render/struct_literal.rs index a70015dcaf..bfbcc263b1 100644 --- a/crates/ide_completion/src/render/struct_literal.rs +++ b/crates/ide_completion/src/render/struct_literal.rs @@ -10,6 +10,7 @@ use crate::{render::RenderContext, CompletionItem, CompletionItemKind}; pub(crate) fn render_struct_literal( ctx: RenderContext<'_>, strukt: hir::Struct, + path: Option<hir::ModPath>, local_name: Option<Name>, ) -> Option<CompletionItem> { let _p = profile::span("render_struct_literal"); @@ -23,7 +24,8 @@ pub(crate) fn render_struct_literal( } let name = local_name.unwrap_or_else(|| strukt.name(ctx.db())).to_smol_str(); - let literal = render_literal(&ctx, &name, strukt.kind(ctx.db()), &visible_fields)?; + + let literal = render_literal(&ctx, path, &name, strukt.kind(ctx.db()), &visible_fields)?; Some(build_completion(ctx, name, literal, strukt)) } @@ -49,13 +51,27 @@ fn build_completion( fn render_literal( ctx: &RenderContext<'_>, + path: Option<hir::ModPath>, name: &str, kind: StructKind, fields: &[hir::Field], ) -> Option<String> { + let path_string; + + let qualified_name = if let Some(path) = path { + path_string = path.to_string(); + &path_string + } else { + name + }; + let mut literal = match kind { - StructKind::Tuple if ctx.snippet_cap().is_some() => render_tuple_as_literal(fields, name), - StructKind::Record => render_record_as_literal(ctx.db(), ctx.snippet_cap(), fields, name), + StructKind::Tuple if ctx.snippet_cap().is_some() => { + render_tuple_as_literal(fields, qualified_name) + } + StructKind::Record => { + render_record_as_literal(ctx.db(), ctx.snippet_cap(), fields, qualified_name) + } _ => return None, }; |