Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/use_.rs')
| -rw-r--r-- | crates/ide-completion/src/completions/use_.rs | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/crates/ide-completion/src/completions/use_.rs b/crates/ide-completion/src/completions/use_.rs index bc717f6da8..dc7a342dce 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) { @@ -101,13 +101,30 @@ pub(crate) fn complete_use_tree(acc: &mut Completions, ctx: &CompletionContext) cov_mark::hit!(use_tree_crate_roots_only); acc.add_crate_roots(ctx); } - // only show modules in a fresh UseTree + // only show modules and non-std enum in a fresh UseTree None => { - cov_mark::hit!(unqualified_path_only_modules_in_import); + cov_mark::hit!(unqualified_path_selected_only); ctx.process_all_names(&mut |name, res| { - if let ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) = res { - acc.add_resolution(ctx, name, res); - } + 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()); + } + } + _ => {} + }; }); acc.add_nameref_keywords_with_colon(ctx); } |