aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/completion/complete_mod.rs
diff options
context:
space:
mode:
authorKirill Bulatov <[email protected]>2020-09-07 23:24:16 +0100
committerKirill Bulatov <[email protected]>2020-09-09 23:42:20 +0100
commit9fb83211f95a450fdadf05f8f64be053f14dc57e (patch)
tree81386f3fe983c19f7e65d79ca3fcb969daa74851 /crates/ide/src/completion/complete_mod.rs
parent57a260f579fec4082aa9e7a30d4b190f06d45877 (diff)
Complete semicolon when needed
Diffstat (limited to 'crates/ide/src/completion/complete_mod.rs')
-rw-r--r--crates/ide/src/completion/complete_mod.rs33
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};
5use ide_db::RootDatabase; 5use ide_db::RootDatabase;
6use rustc_hash::FxHashSet; 6use rustc_hash::FxHashSet;
7 7
8use super::{completion_context::CompletionContext, completion_item::Completions}; 8use crate::{CompletionItem, CompletionItemKind};
9
10use 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 <|> ;`
11pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Option<()> { 16pub(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}