about summary refs log tree commit diff
diff options
context:
space:
mode:
authoryue4u <github@yue.coffee>2022-06-09 16:37:18 +0900
committeryue4u <github@yue.coffee>2022-06-09 16:45:46 +0900
commit29428637093cce62829e863eb5c8143da9860bef (patch)
treee39b6f698976b0ef10d28dd852b556779f4758d0
parent55bc693356d793f3fae5cf9c7f97f8fc1cef5d2d (diff)
downloadrust-29428637093cce62829e863eb5c8143da9860bef.tar.gz
rust-29428637093cce62829e863eb5c8143da9860bef.zip
feat: append :: after
-rw-r--r--crates/ide-completion/src/completions/use_.rs32
-rw-r--r--crates/ide-completion/src/tests/use_tree.rs2
2 files changed, 20 insertions, 14 deletions
diff --git a/crates/ide-completion/src/completions/use_.rs b/crates/ide-completion/src/completions/use_.rs
index 2d862170774..28e4e477517 100644
--- a/crates/ide-completion/src/completions/use_.rs
+++ b/crates/ide-completion/src/completions/use_.rs
@@ -1,13 +1,13 @@
 //! Completion for use trees
 
 use hir::ScopeDef;
-use ide_db::FxHashSet;
+use ide_db::{FxHashSet, SymbolKind};
 use syntax::{ast, AstNode};
 
 use crate::{
     context::{CompletionContext, NameRefContext, PathCompletionCtx, PathKind, PathQualifierCtx},
     item::Builder,
-    CompletionRelevance, Completions,
+    CompletionItem, CompletionItemKind, CompletionRelevance, Completions,
 };
 
 pub(crate) fn complete_use_tree(acc: &mut Completions, ctx: &CompletionContext) {
@@ -105,20 +105,26 @@ pub(crate) fn complete_use_tree(acc: &mut Completions, ctx: &CompletionContext)
         None => {
             cov_mark::hit!(unqualified_path_selected_only);
             ctx.process_all_names(&mut |name, res| {
-                let should_add_resolution = match res {
-                    ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) => true,
-                    ScopeDef::ModuleDef(hir::ModuleDef::Adt(hir::Adt::Enum(_))) => {
-                        match res.krate(ctx.db) {
-                            // exclude prelude enum
-                            Some(krate) => !krate.is_builtin(ctx.db),
-                            _ => true,
+                match res {
+                    ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) => {
+                        acc.add_resolution(ctx, name, res);
+                    }
+                    ScopeDef::ModuleDef(hir::ModuleDef::Adt(hir::Adt::Enum(e))) => {
+                        // exclude prelude enum
+                        let is_builtin =
+                            res.krate(ctx.db).map_or(false, |krate| krate.is_builtin(ctx.db));
+
+                        if !is_builtin {
+                            let item = CompletionItem::new(
+                                CompletionItemKind::SymbolKind(SymbolKind::Enum),
+                                ctx.source_range(),
+                                format!("{}::", e.name(ctx.db)),
+                            );
+                            acc.add(item.build());
                         }
                     }
-                    _ => false,
+                    _ => {}
                 };
-                if should_add_resolution {
-                    acc.add_resolution(ctx, name, res);
-                }
             });
             acc.add_nameref_keywords_with_colon(ctx);
         }
diff --git a/crates/ide-completion/src/tests/use_tree.rs b/crates/ide-completion/src/tests/use_tree.rs
index db283f69ce5..711822d731b 100644
--- a/crates/ide-completion/src/tests/use_tree.rs
+++ b/crates/ide-completion/src/tests/use_tree.rs
@@ -26,7 +26,7 @@ mod foo {}
 // nothing here
 "#,
         expect![[r#"
-            en FooBar
+            en FooBar::
             md foo
             md other_crate
             kw crate::