Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide_completion/src/completions/pattern.rs10
-rw-r--r--crates/ide_completion/src/tests/pattern.rs21
2 files changed, 28 insertions, 3 deletions
diff --git a/crates/ide_completion/src/completions/pattern.rs b/crates/ide_completion/src/completions/pattern.rs
index dac777a69b..0d3a49c668 100644
--- a/crates/ide_completion/src/completions/pattern.rs
+++ b/crates/ide_completion/src/completions/pattern.rs
@@ -141,7 +141,8 @@ fn pattern_path_completion(
| 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(_)))) => {
+ | hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Union(_)))
+ | hir::PathResolution::Def(hir::ModuleDef::BuiltinType(_))) => {
let ty = match res {
hir::PathResolution::TypeParam(param) => param.ty(ctx.db),
hir::PathResolution::SelfType(impl_def) => impl_def.self_ty(ctx.db),
@@ -158,6 +159,13 @@ fn pattern_path_completion(
hir::PathResolution::Def(hir::ModuleDef::Adt(hir::Adt::Union(u))) => {
u.ty(ctx.db)
}
+ hir::PathResolution::Def(hir::ModuleDef::BuiltinType(ty)) => {
+ let module = match ctx.module {
+ Some(m) => m,
+ None => return,
+ };
+ ty.ty(ctx.db, module)
+ }
_ => return,
};
diff --git a/crates/ide_completion/src/tests/pattern.rs b/crates/ide_completion/src/tests/pattern.rs
index b2740d26ce..405a128b7e 100644
--- a/crates/ide_completion/src/tests/pattern.rs
+++ b/crates/ide_completion/src/tests/pattern.rs
@@ -493,7 +493,6 @@ fn f(e: MyEnum) {
check_empty(
r#"
-#[repr(C)]
union U {
i: i32,
f: f32,
@@ -515,5 +514,23 @@ fn f(u: U) {
ct C pub const C: i32
ct D pub const D: i32
"#]],
- )
+ );
+
+ check_empty(
+ r#"
+#[lang = "u32"]
+impl u32 {
+ pub const MIN: Self = 0;
+}
+
+fn f(v: u32) {
+ match v {
+ u32::$0
+ }
+}
+ "#,
+ expect![[r#"
+ ct MIN pub const MIN: Self
+ "#]],
+ );
}