From e0b21b98996b8296942c23864c711b2c1078178a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 4 Nov 2018 20:38:50 +0300 Subject: [PATCH] submodules works with module sources --- crates/ra_analysis/src/descriptors/mod.rs | 4 +-- .../ra_analysis/src/descriptors/module/imp.rs | 29 ++++++++++++------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/crates/ra_analysis/src/descriptors/mod.rs b/crates/ra_analysis/src/descriptors/mod.rs index eaeef54c1e6..775949a88a8 100644 --- a/crates/ra_analysis/src/descriptors/mod.rs +++ b/crates/ra_analysis/src/descriptors/mod.rs @@ -11,7 +11,7 @@ use ra_syntax::{ use crate::{ db::SyntaxDatabase, descriptors::function::{resolve_local_name, FnId, FnScopes}, - descriptors::module::{ModuleId, ModuleScope, ModuleTree}, + descriptors::module::{ModuleId, ModuleScope, ModuleTree, ModuleSource}, input::SourceRootId, syntax_ptr::LocalSyntaxPtr, Cancelable, FileId, @@ -23,7 +23,7 @@ salsa::query_group! { type ModuleTreeQuery; use fn module::imp::module_tree; } - fn submodules(file_id: FileId) -> Cancelable>> { + fn submodules(source: ModuleSource) -> Cancelable>> { type SubmodulesQuery; use fn module::imp::submodules; } diff --git a/crates/ra_analysis/src/descriptors/module/imp.rs b/crates/ra_analysis/src/descriptors/module/imp.rs index 3a010ecf54e..b9cd8173941 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,