submodules works with module sources

This commit is contained in:
Aleksey Kladov 2018-11-04 20:38:50 +03:00
parent 88a15d10d5
commit e0b21b9899
2 changed files with 20 additions and 13 deletions

View file

@ -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<Arc<Vec<SmolStr>>> {
fn submodules(source: ModuleSource) -> Cancelable<Arc<Vec<module::imp::Submodule>>> {
type SubmodulesQuery;
use fn module::imp::submodules;
}

View file

@ -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<Arc<Vec<SmolStr>>> {
source: ModuleSource,
) -> Cancelable<Arc<Vec<Submodule>>> {
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,