diff options
Diffstat (limited to 'crates/ra_hir/src/module_tree.rs')
-rw-r--r-- | crates/ra_hir/src/module_tree.rs | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/crates/ra_hir/src/module_tree.rs b/crates/ra_hir/src/module_tree.rs index fd5a92c5b..0256d7996 100644 --- a/crates/ra_hir/src/module_tree.rs +++ b/crates/ra_hir/src/module_tree.rs | |||
@@ -3,7 +3,7 @@ use std::sync::Arc; | |||
3 | use rustc_hash::{FxHashMap, FxHashSet}; | 3 | use rustc_hash::{FxHashMap, FxHashSet}; |
4 | use arrayvec::ArrayVec; | 4 | use arrayvec::ArrayVec; |
5 | use relative_path::RelativePathBuf; | 5 | use relative_path::RelativePathBuf; |
6 | use ra_db::{FileId, SourceRootId, Cancelable, SourceRoot}; | 6 | use ra_db::{FileId, SourceRootId, SourceRoot}; |
7 | use ra_syntax::{ | 7 | use ra_syntax::{ |
8 | SyntaxNode, TreeArc, | 8 | SyntaxNode, TreeArc, |
9 | algo::generate, | 9 | algo::generate, |
@@ -41,7 +41,7 @@ impl Submodule { | |||
41 | pub(crate) fn submodules_query( | 41 | pub(crate) fn submodules_query( |
42 | db: &impl HirDatabase, | 42 | db: &impl HirDatabase, |
43 | source: SourceItemId, | 43 | source: SourceItemId, |
44 | ) -> Cancelable<Arc<Vec<Submodule>>> { | 44 | ) -> Arc<Vec<Submodule>> { |
45 | db.check_canceled(); | 45 | db.check_canceled(); |
46 | let file_id = source.file_id; | 46 | let file_id = source.file_id; |
47 | let file_items = db.file_items(file_id); | 47 | let file_items = db.file_items(file_id); |
@@ -54,7 +54,7 @@ impl Submodule { | |||
54 | collect_submodules(file_id, &file_items, module.item_list().unwrap()) | 54 | collect_submodules(file_id, &file_items, module.item_list().unwrap()) |
55 | } | 55 | } |
56 | }; | 56 | }; |
57 | return Ok(Arc::new(submodules)); | 57 | return Arc::new(submodules); |
58 | 58 | ||
59 | fn collect_submodules( | 59 | fn collect_submodules( |
60 | file_id: HirFileId, | 60 | file_id: HirFileId, |
@@ -116,10 +116,10 @@ impl ModuleTree { | |||
116 | pub(crate) fn module_tree_query( | 116 | pub(crate) fn module_tree_query( |
117 | db: &impl HirDatabase, | 117 | db: &impl HirDatabase, |
118 | source_root: SourceRootId, | 118 | source_root: SourceRootId, |
119 | ) -> Cancelable<Arc<ModuleTree>> { | 119 | ) -> Arc<ModuleTree> { |
120 | db.check_canceled(); | 120 | db.check_canceled(); |
121 | let res = create_module_tree(db, source_root); | 121 | let res = create_module_tree(db, source_root); |
122 | Ok(Arc::new(res?)) | 122 | Arc::new(res) |
123 | } | 123 | } |
124 | 124 | ||
125 | pub(crate) fn modules<'a>(&'a self) -> impl Iterator<Item = ModuleId> + 'a { | 125 | pub(crate) fn modules<'a>(&'a self) -> impl Iterator<Item = ModuleId> + 'a { |
@@ -225,10 +225,7 @@ fn modules(root: &impl ast::ModuleItemOwner) -> impl Iterator<Item = (Name, &ast | |||
225 | }) | 225 | }) |
226 | } | 226 | } |
227 | 227 | ||
228 | fn create_module_tree<'a>( | 228 | fn create_module_tree<'a>(db: &impl HirDatabase, source_root: SourceRootId) -> ModuleTree { |
229 | db: &impl HirDatabase, | ||
230 | source_root: SourceRootId, | ||
231 | ) -> Cancelable<ModuleTree> { | ||
232 | let mut tree = ModuleTree::default(); | 229 | let mut tree = ModuleTree::default(); |
233 | 230 | ||
234 | let mut roots = FxHashMap::default(); | 231 | let mut roots = FxHashMap::default(); |
@@ -252,10 +249,10 @@ fn create_module_tree<'a>( | |||
252 | &mut roots, | 249 | &mut roots, |
253 | None, | 250 | None, |
254 | source, | 251 | source, |
255 | )?; | 252 | ); |
256 | roots.insert(file_id, module_id); | 253 | roots.insert(file_id, module_id); |
257 | } | 254 | } |
258 | Ok(tree) | 255 | tree |
259 | } | 256 | } |
260 | 257 | ||
261 | fn build_subtree( | 258 | fn build_subtree( |
@@ -266,14 +263,14 @@ fn build_subtree( | |||
266 | roots: &mut FxHashMap<FileId, ModuleId>, | 263 | roots: &mut FxHashMap<FileId, ModuleId>, |
267 | parent: Option<LinkId>, | 264 | parent: Option<LinkId>, |
268 | source: SourceItemId, | 265 | source: SourceItemId, |
269 | ) -> Cancelable<ModuleId> { | 266 | ) -> ModuleId { |
270 | visited.insert(source); | 267 | visited.insert(source); |
271 | let id = tree.push_mod(ModuleData { | 268 | let id = tree.push_mod(ModuleData { |
272 | source, | 269 | source, |
273 | parent, | 270 | parent, |
274 | children: Vec::new(), | 271 | children: Vec::new(), |
275 | }); | 272 | }); |
276 | for sub in db.submodules(source)?.iter() { | 273 | for sub in db.submodules(source).iter() { |
277 | let link = tree.push_link(LinkData { | 274 | let link = tree.push_link(LinkData { |
278 | source: sub.source, | 275 | source: sub.source, |
279 | name: sub.name.clone(), | 276 | name: sub.name.clone(), |
@@ -289,7 +286,7 @@ fn build_subtree( | |||
289 | .map(|file_id| match roots.remove(&file_id) { | 286 | .map(|file_id| match roots.remove(&file_id) { |
290 | Some(module_id) => { | 287 | Some(module_id) => { |
291 | tree.mods[module_id].parent = Some(link); | 288 | tree.mods[module_id].parent = Some(link); |
292 | Ok(module_id) | 289 | module_id |
293 | } | 290 | } |
294 | None => build_subtree( | 291 | None => build_subtree( |
295 | db, | 292 | db, |
@@ -304,7 +301,7 @@ fn build_subtree( | |||
304 | }, | 301 | }, |
305 | ), | 302 | ), |
306 | }) | 303 | }) |
307 | .collect::<Cancelable<Vec<_>>>()?; | 304 | .collect::<Vec<_>>(); |
308 | (points_to, problem) | 305 | (points_to, problem) |
309 | } else { | 306 | } else { |
310 | let points_to = build_subtree( | 307 | let points_to = build_subtree( |
@@ -315,14 +312,14 @@ fn build_subtree( | |||
315 | roots, | 312 | roots, |
316 | Some(link), | 313 | Some(link), |
317 | sub.source, | 314 | sub.source, |
318 | )?; | 315 | ); |
319 | (vec![points_to], None) | 316 | (vec![points_to], None) |
320 | }; | 317 | }; |
321 | 318 | ||
322 | tree.links[link].points_to = points_to; | 319 | tree.links[link].points_to = points_to; |
323 | tree.links[link].problem = problem; | 320 | tree.links[link].problem = problem; |
324 | } | 321 | } |
325 | Ok(id) | 322 | id |
326 | } | 323 | } |
327 | 324 | ||
328 | fn resolve_submodule( | 325 | fn resolve_submodule( |