mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 13:25:09 +00:00
fix: use compute_type_match correctly and update tests accordingly
This commit is contained in:
parent
794988c53b
commit
a10372dac6
3 changed files with 27 additions and 16 deletions
|
@ -496,7 +496,6 @@ impl Completions {
|
||||||
variant,
|
variant,
|
||||||
local_name.clone(),
|
local_name.clone(),
|
||||||
None,
|
None,
|
||||||
false,
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,7 +514,6 @@ impl Completions {
|
||||||
variant,
|
variant,
|
||||||
None,
|
None,
|
||||||
path,
|
path,
|
||||||
true,
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ use syntax::SmolStr;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
context::{ParamContext, ParamKind, PathCompletionCtx, PatternContext},
|
context::{ParamContext, ParamKind, PathCompletionCtx, PatternContext},
|
||||||
item::CompletionRelevanceTypeMatch,
|
|
||||||
render::{
|
render::{
|
||||||
variant::{format_literal_label, format_literal_lookup, visible_fields},
|
variant::{format_literal_label, format_literal_lookup, visible_fields},
|
||||||
RenderContext,
|
RenderContext,
|
||||||
|
@ -38,7 +37,9 @@ pub(crate) fn render_struct_pat(
|
||||||
let lookup = format_literal_lookup(name.as_str(), kind);
|
let lookup = format_literal_lookup(name.as_str(), kind);
|
||||||
let pat = render_pat(&ctx, pattern_ctx, &escaped_name, kind, &visible_fields, fields_omitted)?;
|
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(
|
pub(crate) fn render_variant_pat(
|
||||||
|
@ -48,12 +49,12 @@ pub(crate) fn render_variant_pat(
|
||||||
variant: hir::Variant,
|
variant: hir::Variant,
|
||||||
local_name: Option<Name>,
|
local_name: Option<Name>,
|
||||||
path: Option<&hir::ModPath>,
|
path: Option<&hir::ModPath>,
|
||||||
is_exact_type_match: bool,
|
|
||||||
) -> Option<CompletionItem> {
|
) -> Option<CompletionItem> {
|
||||||
let _p = profile::span("render_variant_pat");
|
let _p = profile::span("render_variant_pat");
|
||||||
|
|
||||||
let fields = variant.fields(ctx.db());
|
let fields = variant.fields(ctx.db());
|
||||||
let (visible_fields, fields_omitted) = visible_fields(ctx.completion, &fields, variant)?;
|
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 {
|
let (name, escaped_name) = match path {
|
||||||
Some(path) => (path.unescaped().to_string().into(), path.to_string().into()),
|
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(
|
fn build_completion(
|
||||||
|
@ -92,13 +93,11 @@ fn build_completion(
|
||||||
lookup: SmolStr,
|
lookup: SmolStr,
|
||||||
pat: String,
|
pat: String,
|
||||||
def: impl HasAttrs + Copy,
|
def: impl HasAttrs + Copy,
|
||||||
is_exact_type_match: bool,
|
adt_ty: hir::Type,
|
||||||
) -> CompletionItem {
|
) -> CompletionItem {
|
||||||
let mut relevance = ctx.completion_relevance();
|
let mut relevance = ctx.completion_relevance();
|
||||||
|
|
||||||
if is_exact_type_match {
|
relevance.type_match = super::compute_type_match(ctx.completion, &adt_ty);
|
||||||
relevance.type_match = Some(CompletionRelevanceTypeMatch::Exact);
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut item = CompletionItem::new(CompletionItemKind::Binding, ctx.source_range(), label);
|
let mut item = CompletionItem::new(CompletionItemKind::Binding, ctx.source_range(), label);
|
||||||
item.set_documentation(ctx.docs(def))
|
item.set_documentation(ctx.docs(def))
|
||||||
|
|
|
@ -50,6 +50,7 @@ fn foo(s: Struct) {
|
||||||
fn record_pattern_field_enum() {
|
fn record_pattern_field_enum() {
|
||||||
check(
|
check(
|
||||||
r#"
|
r#"
|
||||||
|
//- minicore:result
|
||||||
enum Baz { FOO, BAR }
|
enum Baz { FOO, BAR }
|
||||||
|
|
||||||
fn foo(baz: Baz) {
|
fn foo(baz: Baz) {
|
||||||
|
@ -61,7 +62,13 @@ fn foo(baz: Baz) {
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
en Baz
|
en Baz
|
||||||
|
en Result
|
||||||
|
md core
|
||||||
|
ev Err
|
||||||
|
ev Ok
|
||||||
bn Baz::BAR Baz::BAR$0
|
bn Baz::BAR Baz::BAR$0
|
||||||
|
bn Err(…) Err($1)$0
|
||||||
|
bn Ok(…) Ok($1)$0
|
||||||
kw mut
|
kw mut
|
||||||
kw ref
|
kw ref
|
||||||
"#]],
|
"#]],
|
||||||
|
@ -69,6 +76,7 @@ fn foo(baz: Baz) {
|
||||||
|
|
||||||
check(
|
check(
|
||||||
r#"
|
r#"
|
||||||
|
//- minicore:result
|
||||||
enum Baz { FOO, BAR }
|
enum Baz { FOO, BAR }
|
||||||
|
|
||||||
fn foo(baz: Baz) {
|
fn foo(baz: Baz) {
|
||||||
|
@ -80,7 +88,13 @@ fn foo(baz: Baz) {
|
||||||
"#,
|
"#,
|
||||||
expect![[r#"
|
expect![[r#"
|
||||||
en Baz
|
en Baz
|
||||||
|
en Result
|
||||||
|
md core
|
||||||
|
ev Err
|
||||||
|
ev Ok
|
||||||
bn Baz::BAR Baz::BAR$0
|
bn Baz::BAR Baz::BAR$0
|
||||||
|
bn Err(…) Err($1)$0
|
||||||
|
bn Ok(…) Ok($1)$0
|
||||||
kw mut
|
kw mut
|
||||||
kw ref
|
kw ref
|
||||||
"#]],
|
"#]],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue