diff options
Diffstat (limited to 'crates/ide/src/completion/complete_mod.rs')
-rw-r--r-- | crates/ide/src/completion/complete_mod.rs | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/crates/ide/src/completion/complete_mod.rs b/crates/ide/src/completion/complete_mod.rs index 5d41d0f69..f1795d2f7 100644 --- a/crates/ide/src/completion/complete_mod.rs +++ b/crates/ide/src/completion/complete_mod.rs | |||
@@ -5,15 +5,22 @@ use hir::{Module, ModuleSource}; | |||
5 | use ide_db::RootDatabase; | 5 | use ide_db::RootDatabase; |
6 | use rustc_hash::FxHashSet; | 6 | use rustc_hash::FxHashSet; |
7 | 7 | ||
8 | use super::{completion_context::CompletionContext, completion_item::Completions}; | 8 | use crate::{CompletionItem, CompletionItemKind}; |
9 | |||
10 | use super::{ | ||
11 | completion_context::CompletionContext, completion_item::CompletionKind, | ||
12 | completion_item::Completions, | ||
13 | }; | ||
9 | 14 | ||
10 | /// Complete mod declaration, i.e. `mod <|> ;` | 15 | /// Complete mod declaration, i.e. `mod <|> ;` |
11 | pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> { | 16 | pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> { |
12 | let _p = profile::span("completion::complete_mod"); | 17 | let mod_under_caret = match &ctx.mod_under_caret { |
18 | Some(mod_under_caret) if mod_under_caret.item_list().is_some() => return None, | ||
19 | Some(mod_under_caret) => mod_under_caret, | ||
20 | None => return None, | ||
21 | }; | ||
13 | 22 | ||
14 | if !ctx.mod_is_prev { | 23 | let _p = profile::span("completion::complete_mod"); |
15 | return None; | ||
16 | } | ||
17 | 24 | ||
18 | let current_module = ctx.scope.module()?; | 25 | let current_module = ctx.scope.module()?; |
19 | 26 | ||
@@ -36,7 +43,7 @@ pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Op | |||
36 | module_declaration_source_file.file_id.original_file(ctx.db) | 43 | module_declaration_source_file.file_id.original_file(ctx.db) |
37 | }); | 44 | }); |
38 | 45 | ||
39 | let mod_declaration_candidates = source_root | 46 | source_root |
40 | .iter() | 47 | .iter() |
41 | .filter(|submodule_candidate_file| submodule_candidate_file != &module_definition_file) | 48 | .filter(|submodule_candidate_file| submodule_candidate_file != &module_definition_file) |
42 | .filter(|submodule_candidate_file| { | 49 | .filter(|submodule_candidate_file| { |
@@ -66,10 +73,16 @@ pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Op | |||
66 | _ => None, | 73 | _ => None, |
67 | }) | 74 | }) |
68 | .filter(|name| !existing_mod_declarations.contains(name)) | 75 | .filter(|name| !existing_mod_declarations.contains(name)) |
69 | .collect::<Vec<_>>(); | 76 | .for_each(|submodule_name| { |
70 | dbg!(mod_declaration_candidates); | 77 | let mut label = submodule_name; |
71 | 78 | if mod_under_caret.semicolon_token().is_none() { | |
72 | // TODO kb actually add the results | 79 | label.push(';') |
80 | } | ||
81 | acc.add( | ||
82 | CompletionItem::new(CompletionKind::Magic, ctx.source_range(), &label) | ||
83 | .kind(CompletionItemKind::Module), | ||
84 | ) | ||
85 | }); | ||
73 | 86 | ||
74 | Some(()) | 87 | Some(()) |
75 | } | 88 | } |