Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/completions/pattern.rs')
| -rw-r--r-- | crates/ide_completion/src/completions/pattern.rs | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/crates/ide_completion/src/completions/pattern.rs b/crates/ide_completion/src/completions/pattern.rs index 6c17da07d6..dac777a69b 100644 --- a/crates/ide_completion/src/completions/pattern.rs +++ b/crates/ide_completion/src/completions/pattern.rs @@ -137,25 +137,30 @@ fn pattern_path_completion( } } } - hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Enum(e))) => { - cov_mark::hit!(enum_plain_qualified_use_tree); - e.variants(ctx.db) - .into_iter() - .for_each(|variant| acc.add_enum_variant(ctx, variant, None)); - } - res @ (hir::PathResolution::TypeParam(_) | hir::PathResolution::SelfType(_)) => { + res @ (hir::PathResolution::TypeParam(_) + | hir::PathResolution::SelfType(_) + | hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Struct(_))) + | hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Enum(_))) + | hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Union(_)))) => { let ty = match res { hir::PathResolution::TypeParam(param) => param.ty(ctx.db), hir::PathResolution::SelfType(impl_def) => impl_def.self_ty(ctx.db), + hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Struct(s))) => { + s.ty(ctx.db) + } + hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Enum(e))) => { + cov_mark::hit!(enum_plain_qualified_use_tree); + e.variants(ctx.db) + .into_iter() + .for_each(|variant| acc.add_enum_variant(ctx, variant, None)); + e.ty(ctx.db) + } + hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Union(u))) => { + u.ty(ctx.db) + } _ => return, }; - if let Some(hir::Adt::Enum(e)) = ty.as_adt() { - e.variants(ctx.db) - .into_iter() - .for_each(|variant| acc.add_enum_variant(ctx, variant, None)); - } - let traits_in_scope = ctx.scope.visible_traits(); let mut seen = FxHashSet::default(); ty.iterate_path_candidates( @@ -165,12 +170,19 @@ fn pattern_path_completion( ctx.module, None, |item| { - // Note associated consts cannot be referenced in patterns - if let AssocItem::TypeAlias(ta) = item { - // We might iterate candidates of a trait multiple times here, so deduplicate them. - if seen.insert(item) { - acc.add_type_alias(ctx, ta); + match item { + AssocItem::TypeAlias(ta) => { + // We might iterate candidates of a trait multiple times here, so deduplicate them. + if seen.insert(item) { + acc.add_type_alias(ctx, ta); + } + } + AssocItem::Const(c) => { + if seen.insert(item) { + acc.add_const(ctx, c); + } } + _ => {} } None::<()> }, |