aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/completion/complete_mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide/src/completion/complete_mod.rs')
-rw-r--r--crates/ide/src/completion/complete_mod.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/crates/ide/src/completion/complete_mod.rs b/crates/ide/src/completion/complete_mod.rs
new file mode 100644
index 000000000..4c1e79603
--- /dev/null
+++ b/crates/ide/src/completion/complete_mod.rs
@@ -0,0 +1,39 @@
1//! Completes mod declarations.
2
3use base_db::FileLoader;
4use hir::ModuleSource;
5
6use super::{completion_context::CompletionContext, completion_item::Completions};
7
8/// Complete mod declaration, i.e. `mod <|> ;`
9pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) {
10 let module_names_for_import = ctx
11 .sema
12 // TODO kb this is wrong, since we need not the file module
13 .to_module_def(ctx.position.file_id)
14 .and_then(|current_module| {
15 dbg!(current_module.name(ctx.db));
16 dbg!(current_module.definition_source(ctx.db));
17 dbg!(current_module.declaration_source(ctx.db));
18 let mut zz = Vec::new();
19 let mut vv = Some(current_module);
20 while let Some(ModuleSource::Module(_)) =
21 vv.map(|vv| vv.definition_source(ctx.db).value)
22 {
23 zz.push(current_module.name(ctx.db));
24 vv = current_module.parent(ctx.db);
25 }
26 dbg!(zz);
27 let definition_source = current_module.definition_source(ctx.db);
28 // TODO kb filter out declarations in possible_sudmobule_names
29 // let declaration_source = current_module.declaration_source(ctx.db);
30 let module_definition_source_file = definition_source.file_id.original_file(ctx.db);
31 let mod_declaration_candidates =
32 ctx.db.possible_sudmobule_names(module_definition_source_file);
33 dbg!(mod_declaration_candidates);
34 // TODO kb exlude existing children from the candidates
35 let existing_children = current_module.children(ctx.db).collect::<Vec<_>>();
36 None::<Vec<String>>
37 })
38 .unwrap_or_default();
39}