From ee4d904cfb1b604bc8627491e05980ac43cd59e3 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 25 Oct 2018 10:57:55 +0300 Subject: Store all the data in the Salsa Database --- crates/ra_analysis/src/descriptors/module/imp.rs | 22 +++++++++++++--------- crates/ra_analysis/src/descriptors/module/mod.rs | 10 ++-------- 2 files changed, 15 insertions(+), 17 deletions(-) (limited to 'crates/ra_analysis/src/descriptors/module') diff --git a/crates/ra_analysis/src/descriptors/module/imp.rs b/crates/ra_analysis/src/descriptors/module/imp.rs index 22e4bd785..6a408dc89 100644 --- a/crates/ra_analysis/src/descriptors/module/imp.rs +++ b/crates/ra_analysis/src/descriptors/module/imp.rs @@ -9,7 +9,7 @@ use ra_syntax::{ use crate::{ FileId, Cancelable, FileResolverImp, - db, + db::{self, input::{SourceRoot, SourceRootId}}, }; use super::{ @@ -35,9 +35,12 @@ pub(super) fn modules(root: ast::Root<'_>) -> impl Iterator Cancelable> { +pub(super) fn module_tree( + db: &impl ModulesDatabase, + source_root: SourceRootId, +) -> Cancelable> { db::check_canceled(db)?; - let res = create_module_tree(db)?; + let res = create_module_tree(db, source_root)?; Ok(Arc::new(res)) } @@ -50,6 +53,7 @@ pub struct Submodule { fn create_module_tree<'a>( db: &impl ModulesDatabase, + source_root: SourceRootId, ) -> Cancelable { let mut tree = ModuleTree { mods: Vec::new(), @@ -59,12 +63,13 @@ fn create_module_tree<'a>( let mut roots = FxHashMap::default(); let mut visited = FxHashSet::default(); - for &file_id in db.file_set().files.iter() { + let source_root = db.source_root(source_root); + for &file_id in source_root.files.iter() { if visited.contains(&file_id) { continue; // TODO: use explicit crate_roots here } assert!(!roots.contains_key(&file_id)); - let module_id = build_subtree(db, &mut tree, &mut visited, &mut roots, None, file_id)?; + let module_id = build_subtree(db, &source_root, &mut tree, &mut visited, &mut roots, None, file_id)?; roots.insert(file_id, module_id); } Ok(tree) @@ -72,6 +77,7 @@ fn create_module_tree<'a>( fn build_subtree( db: &impl ModulesDatabase, + source_root: &SourceRoot, tree: &mut ModuleTree, visited: &mut FxHashSet, roots: &mut FxHashMap, @@ -84,10 +90,8 @@ fn build_subtree( parent, children: Vec::new(), }); - let file_set = db.file_set(); - let file_resolver = &file_set.resolver; for name in db.submodules(file_id)?.iter() { - let (points_to, problem) = resolve_submodule(file_id, name, file_resolver); + let (points_to, problem) = resolve_submodule(file_id, name, &source_root.file_resolver); let link = tree.push_link(LinkData { name: name.clone(), owner: id, @@ -102,7 +106,7 @@ fn build_subtree( tree.module_mut(module_id).parent = Some(link); Ok(module_id) } - None => build_subtree(db, tree, visited, roots, Some(link), file_id), + None => build_subtree(db, source_root, tree, visited, roots, Some(link), file_id), }) .collect::>>()?; tree.link_mut(link).points_to = points_to; diff --git a/crates/ra_analysis/src/descriptors/module/mod.rs b/crates/ra_analysis/src/descriptors/module/mod.rs index 52da650b3..98024cc15 100644 --- a/crates/ra_analysis/src/descriptors/module/mod.rs +++ b/crates/ra_analysis/src/descriptors/module/mod.rs @@ -7,12 +7,12 @@ use ra_syntax::{ast::{self, NameOwner, AstNode}, SmolStr, SyntaxNode}; use crate::{ FileId, Cancelable, - db::SyntaxDatabase, + db::{SyntaxDatabase, input::SourceRootId}, }; salsa::query_group! { pub(crate) trait ModulesDatabase: SyntaxDatabase { - fn module_tree() -> Cancelable> { + fn module_tree(source_root_id: SourceRootId) -> Cancelable> { type ModuleTreeQuery; use fn imp::module_tree; } @@ -110,15 +110,9 @@ impl ModuleId { } impl LinkId { - pub(crate) fn name(self, tree: &ModuleTree) -> SmolStr { - tree.link(self).name.clone() - } pub(crate) fn owner(self, tree: &ModuleTree) -> ModuleId { tree.link(self).owner } - fn points_to(self, tree: &ModuleTree) -> &[ModuleId] { - &tree.link(self).points_to - } pub(crate) fn bind_source<'a>( self, tree: &ModuleTree, -- cgit v1.2.3