Merge #8731
8731: Complete enum variants through type aliases r=Veykril a=Veykril Fixes #8730 bors r+ Co-authored-by: Lukas Tobias Wirth <lukastw97@gmail.com>
This commit is contained in:
commit
010e4c8fe0
@ -52,13 +52,17 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
|
|||||||
| PathResolution::Def(def @ hir::ModuleDef::TypeAlias(_))
|
| PathResolution::Def(def @ hir::ModuleDef::TypeAlias(_))
|
||||||
| PathResolution::Def(def @ hir::ModuleDef::BuiltinType(_)) => {
|
| PathResolution::Def(def @ hir::ModuleDef::BuiltinType(_)) => {
|
||||||
if let hir::ModuleDef::Adt(Adt::Enum(e)) = def {
|
if let hir::ModuleDef::Adt(Adt::Enum(e)) = def {
|
||||||
for variant in e.variants(ctx.db) {
|
add_enum_variants(ctx, acc, e);
|
||||||
acc.add_enum_variant(ctx, variant, None);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let ty = match def {
|
let ty = match def {
|
||||||
hir::ModuleDef::Adt(adt) => adt.ty(ctx.db),
|
hir::ModuleDef::Adt(adt) => adt.ty(ctx.db),
|
||||||
hir::ModuleDef::TypeAlias(a) => a.ty(ctx.db),
|
hir::ModuleDef::TypeAlias(a) => {
|
||||||
|
let ty = a.ty(ctx.db);
|
||||||
|
if let Some(Adt::Enum(e)) = ty.as_adt() {
|
||||||
|
add_enum_variants(ctx, acc, e);
|
||||||
|
}
|
||||||
|
ty
|
||||||
|
}
|
||||||
hir::ModuleDef::BuiltinType(builtin) => {
|
hir::ModuleDef::BuiltinType(builtin) => {
|
||||||
let module = match ctx.scope.module() {
|
let module = match ctx.scope.module() {
|
||||||
Some(it) => it,
|
Some(it) => it,
|
||||||
@ -122,9 +126,7 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
|
|||||||
};
|
};
|
||||||
|
|
||||||
if let Some(Adt::Enum(e)) = ty.as_adt() {
|
if let Some(Adt::Enum(e)) = ty.as_adt() {
|
||||||
for variant in e.variants(ctx.db) {
|
add_enum_variants(ctx, acc, e);
|
||||||
acc.add_enum_variant(ctx, variant, None);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let traits_in_scope = ctx.scope.traits_in_scope();
|
let traits_in_scope = ctx.scope.traits_in_scope();
|
||||||
@ -151,6 +153,12 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn add_enum_variants(ctx: &CompletionContext, acc: &mut Completions, e: hir::Enum) {
|
||||||
|
for variant in e.variants(ctx.db) {
|
||||||
|
acc.add_enum_variant(ctx, variant, None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use expect_test::{expect, Expect};
|
use expect_test::{expect, Expect};
|
||||||
@ -782,4 +790,22 @@ impl u8 {
|
|||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn completes_through_alias() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
enum Foo {
|
||||||
|
Bar
|
||||||
|
}
|
||||||
|
type Foo2 = Foo;
|
||||||
|
fn main() {
|
||||||
|
Foo2::$0
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
ev Bar ()
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user