diff options
Diffstat (limited to 'crates/ra_analysis/src/descriptors/module/imp.rs')
-rw-r--r-- | crates/ra_analysis/src/descriptors/module/imp.rs | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/crates/ra_analysis/src/descriptors/module/imp.rs b/crates/ra_analysis/src/descriptors/module/imp.rs index dae3a356d..1c102f4e5 100644 --- a/crates/ra_analysis/src/descriptors/module/imp.rs +++ b/crates/ra_analysis/src/descriptors/module/imp.rs | |||
@@ -1,24 +1,25 @@ | |||
1 | use std::sync::Arc; | 1 | use std::sync::Arc; |
2 | 2 | ||
3 | use relative_path::RelativePathBuf; | ||
4 | use rustc_hash::{FxHashMap, FxHashSet}; | ||
5 | use ra_syntax::{ | 3 | use ra_syntax::{ |
6 | SmolStr, | ||
7 | ast::{self, NameOwner}, | 4 | ast::{self, NameOwner}, |
5 | SmolStr, | ||
8 | }; | 6 | }; |
7 | use relative_path::RelativePathBuf; | ||
8 | use rustc_hash::{FxHashMap, FxHashSet}; | ||
9 | 9 | ||
10 | use crate::{ | 10 | use crate::{ |
11 | FileId, Cancelable, FileResolverImp, db, | 11 | db, |
12 | input::{SourceRoot, SourceRootId}, | ||
13 | descriptors::DescriptorDatabase, | 12 | descriptors::DescriptorDatabase, |
13 | input::{SourceRoot, SourceRootId}, | ||
14 | Cancelable, FileId, FileResolverImp, | ||
14 | }; | 15 | }; |
15 | 16 | ||
16 | use super::{ | 17 | use super::{LinkData, LinkId, ModuleData, ModuleId, ModuleScope, ModuleTree, Problem}; |
17 | ModuleData, ModuleTree, ModuleId, LinkId, LinkData, Problem, ModuleScope | ||
18 | }; | ||
19 | |||
20 | 18 | ||
21 | pub(crate) fn submodules(db: &impl DescriptorDatabase, file_id: FileId) -> Cancelable<Arc<Vec<SmolStr>>> { | 19 | pub(crate) fn submodules( |
20 | db: &impl DescriptorDatabase, | ||
21 | file_id: FileId, | ||
22 | ) -> Cancelable<Arc<Vec<SmolStr>>> { | ||
22 | db::check_canceled(db)?; | 23 | db::check_canceled(db)?; |
23 | let file = db.file_syntax(file_id); | 24 | let file = db.file_syntax(file_id); |
24 | let root = file.ast(); | 25 | let root = file.ast(); |
@@ -57,13 +58,11 @@ pub(crate) fn module_tree( | |||
57 | Ok(Arc::new(res)) | 58 | Ok(Arc::new(res)) |
58 | } | 59 | } |
59 | 60 | ||
60 | |||
61 | #[derive(Clone, Hash, PartialEq, Eq, Debug)] | 61 | #[derive(Clone, Hash, PartialEq, Eq, Debug)] |
62 | pub struct Submodule { | 62 | pub struct Submodule { |
63 | pub name: SmolStr, | 63 | pub name: SmolStr, |
64 | } | 64 | } |
65 | 65 | ||
66 | |||
67 | fn create_module_tree<'a>( | 66 | fn create_module_tree<'a>( |
68 | db: &impl DescriptorDatabase, | 67 | db: &impl DescriptorDatabase, |
69 | source_root: SourceRootId, | 68 | source_root: SourceRootId, |
@@ -82,7 +81,15 @@ fn create_module_tree<'a>( | |||
82 | continue; // TODO: use explicit crate_roots here | 81 | continue; // TODO: use explicit crate_roots here |
83 | } | 82 | } |
84 | assert!(!roots.contains_key(&file_id)); | 83 | assert!(!roots.contains_key(&file_id)); |
85 | let module_id = build_subtree(db, &source_root, &mut tree, &mut visited, &mut roots, None, file_id)?; | 84 | let module_id = build_subtree( |
85 | db, | ||
86 | &source_root, | ||
87 | &mut tree, | ||
88 | &mut visited, | ||
89 | &mut roots, | ||
90 | None, | ||
91 | file_id, | ||
92 | )?; | ||
86 | roots.insert(file_id, module_id); | 93 | roots.insert(file_id, module_id); |
87 | } | 94 | } |
88 | Ok(tree) | 95 | Ok(tree) |