From e0b21b98996b8296942c23864c711b2c1078178a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 4 Nov 2018 20:38:50 +0300 Subject: submodules works with module sources --- crates/ra_analysis/src/descriptors/module/imp.rs | 29 +++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'crates/ra_analysis/src/descriptors/module/imp.rs') diff --git a/crates/ra_analysis/src/descriptors/module/imp.rs b/crates/ra_analysis/src/descriptors/module/imp.rs index 3a010ecf5..b9cd81739 100644 --- a/crates/ra_analysis/src/descriptors/module/imp.rs +++ b/crates/ra_analysis/src/descriptors/module/imp.rs @@ -19,14 +19,25 @@ use super::{ ModuleTree, Problem, }; +#[derive(Clone, Hash, PartialEq, Eq, Debug)] +pub(crate) struct Submodule { + name: SmolStr +} + pub(crate) fn submodules( db: &impl DescriptorDatabase, - file_id: FileId, -) -> Cancelable>> { + source: ModuleSource, +) -> Cancelable>> { db::check_canceled(db)?; + let file_id = match source { + ModuleSource::File(it) => it, + _ => unimplemented!(), + }; let file = db.file_syntax(file_id); let root = file.ast(); - let submodules = modules(root).map(|(name, _)| name).collect(); + let submodules = modules(root) + .map(|(name, _)| Submodule { name }) + .collect(); Ok(Arc::new(submodules)) } @@ -66,11 +77,6 @@ pub(crate) fn module_tree( Ok(Arc::new(res)) } -#[derive(Clone, Hash, PartialEq, Eq, Debug)] -pub struct Submodule { - pub name: SmolStr, -} - fn create_module_tree<'a>( db: &impl DescriptorDatabase, source_root: SourceRootId, @@ -118,10 +124,11 @@ fn build_subtree( parent, children: Vec::new(), }); - for name in db.submodules(file_id)?.iter() { - let (points_to, problem) = resolve_submodule(file_id, name, &source_root.file_resolver); + for sub in db.submodules(ModuleSource::File(file_id))?.iter() { + let name = sub.name.clone(); + let (points_to, problem) = resolve_submodule(file_id, &name, &source_root.file_resolver); let link = tree.push_link(LinkData { - name: name.clone(), + name, owner: id, points_to: Vec::new(), problem: None, -- cgit v1.2.3