diff --git a/crates/ide-completion/src/completions.rs b/crates/ide-completion/src/completions.rs index fddd02fc13e..ec8a23e907c 100644 --- a/crates/ide-completion/src/completions.rs +++ b/crates/ide-completion/src/completions.rs @@ -496,7 +496,6 @@ impl Completions { variant, local_name.clone(), None, - false, )); } @@ -515,7 +514,6 @@ impl Completions { variant, None, path, - true, )); } diff --git a/crates/ide-completion/src/render/pattern.rs b/crates/ide-completion/src/render/pattern.rs index 9cf766ce66c..37c65abba93 100644 --- a/crates/ide-completion/src/render/pattern.rs +++ b/crates/ide-completion/src/render/pattern.rs @@ -7,7 +7,6 @@ use syntax::SmolStr; use crate::{ context::{ParamContext, ParamKind, PathCompletionCtx, PatternContext}, - item::CompletionRelevanceTypeMatch, render::{ variant::{format_literal_label, format_literal_lookup, visible_fields}, RenderContext, @@ -38,7 +37,9 @@ pub(crate) fn render_struct_pat( let lookup = format_literal_lookup(name.as_str(), kind); let pat = render_pat(&ctx, pattern_ctx, &escaped_name, kind, &visible_fields, fields_omitted)?; - Some(build_completion(ctx, label, lookup, pat, strukt, true)) + let db = ctx.db(); + + Some(build_completion(ctx, label, lookup, pat, strukt, strukt.ty(db))) } pub(crate) fn render_variant_pat( @@ -48,12 +49,12 @@ pub(crate) fn render_variant_pat( variant: hir::Variant, local_name: Option, path: Option<&hir::ModPath>, - is_exact_type_match: bool, ) -> Option { let _p = profile::span("render_variant_pat"); let fields = variant.fields(ctx.db()); let (visible_fields, fields_omitted) = visible_fields(ctx.completion, &fields, variant)?; + let enum_ty = variant.parent_enum(ctx.db()).ty(ctx.db()); let (name, escaped_name) = match path { Some(path) => (path.unescaped().to_string().into(), path.to_string().into()), @@ -83,7 +84,7 @@ pub(crate) fn render_variant_pat( } }; - Some(build_completion(ctx, label, lookup, pat, variant, is_exact_type_match)) + Some(build_completion(ctx, label, lookup, pat, variant, enum_ty)) } fn build_completion( @@ -92,13 +93,11 @@ fn build_completion( lookup: SmolStr, pat: String, def: impl HasAttrs + Copy, - is_exact_type_match: bool, + adt_ty: hir::Type, ) -> CompletionItem { let mut relevance = ctx.completion_relevance(); - if is_exact_type_match { - relevance.type_match = Some(CompletionRelevanceTypeMatch::Exact); - } + relevance.type_match = super::compute_type_match(ctx.completion, &adt_ty); let mut item = CompletionItem::new(CompletionItemKind::Binding, ctx.source_range(), label); item.set_documentation(ctx.docs(def)) diff --git a/crates/ide-completion/src/tests/record.rs b/crates/ide-completion/src/tests/record.rs index 8b8c56d1d5a..b9f157d1992 100644 --- a/crates/ide-completion/src/tests/record.rs +++ b/crates/ide-completion/src/tests/record.rs @@ -50,6 +50,7 @@ fn foo(s: Struct) { fn record_pattern_field_enum() { check( r#" +//- minicore:result enum Baz { FOO, BAR } fn foo(baz: Baz) { @@ -61,7 +62,13 @@ fn foo(baz: Baz) { "#, expect![[r#" en Baz + en Result + md core + ev Err + ev Ok bn Baz::BAR Baz::BAR$0 + bn Err(…) Err($1)$0 + bn Ok(…) Ok($1)$0 kw mut kw ref "#]], @@ -69,6 +76,7 @@ fn foo(baz: Baz) { check( r#" +//- minicore:result enum Baz { FOO, BAR } fn foo(baz: Baz) { @@ -77,13 +85,19 @@ fn foo(baz: Baz) { $0 } } -"#, + "#, expect![[r#" - en Baz - bn Baz::BAR Baz::BAR$0 - kw mut - kw ref - "#]], + en Baz + en Result + md core + ev Err + ev Ok + bn Baz::BAR Baz::BAR$0 + bn Err(…) Err($1)$0 + bn Ok(…) Ok($1)$0 + kw mut + kw ref + "#]], ); }