From 14203c63782a47f0bdf602fe65e1c282e3adfce3 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Fri, 18 Mar 2022 15:34:31 +0100 Subject: [PATCH] Complete assoc const patterns on builtin types --- .../ide_completion/src/completions/pattern.rs | 10 ++++++++- crates/ide_completion/src/tests/pattern.rs | 21 +++++++++++++++++-- 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 dac777a69bc..0d3a49c668d 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 b2740d26ce0..405a128b7e0 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 + "#]], + ); }