aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/module_tree.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-06 14:44:50 +0000
committerAleksey Kladov <[email protected]>2019-01-06 14:44:50 +0000
commit733383446fc229a35d4432d14c295c5a01e5a87f (patch)
treebffd84981df9cca1143807796dc6772ddcfe8e0b /crates/ra_hir/src/module_tree.rs
parent17b2994b99394562b5e515c953a3a83c5977da76 (diff)
move submodule computationt to module_tree
Diffstat (limited to 'crates/ra_hir/src/module_tree.rs')
-rw-r--r--crates/ra_hir/src/module_tree.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/crates/ra_hir/src/module_tree.rs b/crates/ra_hir/src/module_tree.rs
index cd82f25db..b7912ba5e 100644
--- a/crates/ra_hir/src/module_tree.rs
+++ b/crates/ra_hir/src/module_tree.rs
@@ -20,6 +20,40 @@ pub enum Submodule {
20} 20}
21 21
22impl Submodule { 22impl Submodule {
23 pub(crate) fn submodules_query(
24 db: &impl HirDatabase,
25 source: ModuleSource,
26 ) -> Cancelable<Arc<Vec<Submodule>>> {
27 db.check_canceled()?;
28 let file_id = source.file_id();
29 let submodules = match source.resolve(db) {
30 ModuleSourceNode::SourceFile(it) => collect_submodules(db, file_id, it.borrowed()),
31 ModuleSourceNode::Module(it) => it
32 .borrowed()
33 .item_list()
34 .map(|it| collect_submodules(db, file_id, it))
35 .unwrap_or_else(Vec::new),
36 };
37 return Ok(Arc::new(submodules));
38
39 fn collect_submodules<'a>(
40 db: &impl HirDatabase,
41 file_id: HirFileId,
42 root: impl ast::ModuleItemOwner<'a>,
43 ) -> Vec<Submodule> {
44 modules(root)
45 .map(|(name, m)| {
46 if m.has_semi() {
47 Submodule::Declaration(name)
48 } else {
49 let src = ModuleSource::new_inline(db, file_id, m);
50 Submodule::Definition(name, src)
51 }
52 })
53 .collect()
54 }
55 }
56
23 fn name(&self) -> &Name { 57 fn name(&self) -> &Name {
24 match self { 58 match self {
25 Submodule::Declaration(name) => name, 59 Submodule::Declaration(name) => name,