@@ -37,7 +37,10 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
37
37
acc. add_resolution ( ctx, name. to_string ( ) , & res. def . map ( hir:: Resolution :: Def ) ) ;
38
38
}
39
39
}
40
- hir:: ModuleDef :: Enum ( _) | hir:: ModuleDef :: Struct ( _) | hir:: ModuleDef :: Union ( _) => {
40
+ hir:: ModuleDef :: Enum ( _)
41
+ | hir:: ModuleDef :: Struct ( _)
42
+ | hir:: ModuleDef :: Union ( _)
43
+ | hir:: ModuleDef :: TypeAlias ( _) => {
41
44
if let hir:: ModuleDef :: Enum ( e) = def {
42
45
for variant in e. variants ( ctx. db ) {
43
46
acc. add_enum_variant ( ctx, variant) ;
@@ -47,6 +50,7 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
47
50
hir:: ModuleDef :: Enum ( e) => e. ty ( ctx. db ) ,
48
51
hir:: ModuleDef :: Struct ( s) => s. ty ( ctx. db ) ,
49
52
hir:: ModuleDef :: Union ( u) => u. ty ( ctx. db ) ,
53
+ hir:: ModuleDef :: TypeAlias ( a) => a. ty ( ctx. db ) ,
50
54
_ => unreachable ! ( ) ,
51
55
} ;
52
56
let krate = ctx. module . and_then ( |m| m. krate ( ctx. db ) ) ;
@@ -544,6 +548,42 @@ mod tests {
544
548
insert: "bar",
545
549
kind: Module,
546
550
},
551
+ ]"###
552
+ ) ;
553
+ }
554
+
555
+ #[ test]
556
+ fn completes_type_alias ( ) {
557
+ assert_debug_snapshot_matches ! (
558
+ do_reference_completion(
559
+ "
560
+ struct S;
561
+ impl S { fn foo() {} }
562
+ type T = S;
563
+ impl T { fn bar() {} }
564
+
565
+ fn main() {
566
+ T::<|>;
567
+ }
568
+ "
569
+ ) ,
570
+ @r###"[
571
+ CompletionItem {
572
+ label: "bar",
573
+ source_range: [185; 185),
574
+ delete: [185; 185),
575
+ insert: "bar()$0",
576
+ kind: Function,
577
+ detail: "fn bar()",
578
+ },
579
+ CompletionItem {
580
+ label: "foo",
581
+ source_range: [185; 185),
582
+ delete: [185; 185),
583
+ insert: "foo()$0",
584
+ kind: Function,
585
+ detail: "fn foo()",
586
+ },
547
587
]"###
548
588
) ;
549
589
}
0 commit comments