From ad17ba12d1a9985a7b8bc52060942149ffb18b69 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 16 Sep 2022 16:11:58 +0200 Subject: [PATCH] Complete variants and assoc items in path pattern through type aliases --- .../ide-completion/src/completions/pattern.rs | 1 + crates/ide-completion/src/tests/pattern.rs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/crates/ide-completion/src/completions/pattern.rs b/crates/ide-completion/src/completions/pattern.rs index 71d2d9d434..58d5bf114c 100644 --- a/crates/ide-completion/src/completions/pattern.rs +++ b/crates/ide-completion/src/completions/pattern.rs @@ -145,6 +145,7 @@ pub(crate) fn complete_pattern_path( u.ty(ctx.db) } hir::PathResolution::Def(hir::ModuleDef::BuiltinType(ty)) => ty.ty(ctx.db), + hir::PathResolution::Def(hir::ModuleDef::TypeAlias(ty)) => ty.ty(ctx.db), _ => return, }; diff --git a/crates/ide-completion/src/tests/pattern.rs b/crates/ide-completion/src/tests/pattern.rs index 85c4dbd662..db8bef6640 100644 --- a/crates/ide-completion/src/tests/pattern.rs +++ b/crates/ide-completion/src/tests/pattern.rs @@ -714,3 +714,30 @@ impl Ty { "#]], ); } + +#[test] +fn through_alias() { + check_empty( + r#" +enum Enum { + Unit, + Tuple(T), +} + +type EnumAlias = Enum; + +fn f(x: EnumAlias) { + match x { + EnumAlias::$0 => (), + _ => (), + } + +} + +"#, + expect![[r#" + bn Tuple(…) Tuple($1)$0 + bn Unit Unit$0 + "#]], + ); +}