Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/render/pattern.rs')
-rw-r--r--crates/ide-completion/src/render/pattern.rs41
1 files changed, 17 insertions, 24 deletions
diff --git a/crates/ide-completion/src/render/pattern.rs b/crates/ide-completion/src/render/pattern.rs
index f9c4037dee..d6779961c0 100644
--- a/crates/ide-completion/src/render/pattern.rs
+++ b/crates/ide-completion/src/render/pattern.rs
@@ -7,7 +7,10 @@ use syntax::SmolStr;
use crate::{
context::{ParamKind, PatternContext},
- render::{variant::visible_fields, RenderContext},
+ render::{
+ variant::{format_literal_label, visible_fields},
+ RenderContext,
+ },
CompletionItem, CompletionItemKind,
};
@@ -29,16 +32,11 @@ pub(crate) fn render_struct_pat(
let name = local_name.unwrap_or_else(|| strukt.name(ctx.db()));
let (name, escaped_name) = (name.to_smol_str(), name.escaped().to_smol_str());
- let pat = render_pat(
- &ctx,
- pattern_ctx,
- &escaped_name,
- strukt.kind(ctx.db()),
- &visible_fields,
- fields_omitted,
- )?;
+ let kind = strukt.kind(ctx.db());
+ let label = format_literal_label(name.as_str(), kind);
+ let pat = render_pat(&ctx, pattern_ctx, &escaped_name, kind, &visible_fields, fields_omitted)?;
- Some(build_completion(ctx, name, pat, strukt))
+ Some(build_completion(ctx, label, pat, strukt))
}
pub(crate) fn render_variant_pat(
@@ -60,25 +58,20 @@ pub(crate) fn render_variant_pat(
(name.to_smol_str(), name.escaped().to_smol_str())
}
};
- let pat = render_pat(
- &ctx,
- pattern_ctx,
- &escaped_name,
- variant.kind(ctx.db()),
- &visible_fields,
- fields_omitted,
- )?;
+ let kind = variant.kind(ctx.db());
+ let label = format_literal_label(name.as_str(), kind);
+ let pat = render_pat(&ctx, pattern_ctx, &escaped_name, kind, &visible_fields, fields_omitted)?;
- Some(build_completion(ctx, name, pat, variant))
+ Some(build_completion(ctx, label, pat, variant))
}
fn build_completion(
ctx: RenderContext<'_>,
- name: SmolStr,
+ label: SmolStr,
pat: String,
def: impl HasAttrs + Copy,
) -> CompletionItem {
- let mut item = CompletionItem::new(CompletionItemKind::Binding, ctx.source_range(), name);
+ let mut item = CompletionItem::new(CompletionItemKind::Binding, ctx.source_range(), label);
item.set_documentation(ctx.docs(def))
.set_deprecated(ctx.is_deprecated(def))
.detail(&pat)
@@ -103,7 +96,7 @@ fn render_pat(
StructKind::Record => {
render_record_as_pat(ctx.db(), ctx.snippet_cap(), fields, name, fields_omitted)
}
- StructKind::Unit => return None,
+ StructKind::Unit => name.to_string(),
};
let needs_ascription = matches!(
@@ -138,7 +131,7 @@ fn render_record_as_pat(
format!(
"{name} {{ {}{} }}",
fields.enumerate().format_with(", ", |(idx, field), f| {
- f(&format_args!("{}${}", field.name(db), idx + 1))
+ f(&format_args!("{}${}", field.name(db).escaped(), idx + 1))
}),
if fields_omitted { ", .." } else { "" },
name = name
@@ -147,7 +140,7 @@ fn render_record_as_pat(
None => {
format!(
"{name} {{ {}{} }}",
- fields.map(|field| field.name(db)).format(", "),
+ fields.map(|field| field.name(db).escaped().to_smol_str()).format(", "),
if fields_omitted { ", .." } else { "" },
name = name
)