about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2022-04-06 14:24:06 +0200
committerLukas Wirth <lukastw97@gmail.com>2022-04-06 14:24:06 +0200
commit4e6390bb129f212614eda8a0cd6662d9cb4440f3 (patch)
tree44a83884d702b27954f53d1aead400a5f4475326
parentd9f6cee100fde49d3a76b3fac84b9b13cedf1898 (diff)
downloadrust-4e6390bb129f212614eda8a0cd6662d9cb4440f3.tar.gz
rust-4e6390bb129f212614eda8a0cd6662d9cb4440f3.zip
Fix `SearchScope::reverse_dependencies` trying to search more files than necessary
-rw-r--r--crates/ide_db/src/search.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/crates/ide_db/src/search.rs b/crates/ide_db/src/search.rs
index 4a11fb73cd6..63a45aa3efc 100644
--- a/crates/ide_db/src/search.rs
+++ b/crates/ide_db/src/search.rs
@@ -102,12 +102,18 @@ impl SearchScope {
     /// Build a search scope spanning all the reverse dependencies of the given crate.
     fn reverse_dependencies(db: &RootDatabase, of: hir::Crate) -> SearchScope {
         let mut entries = FxHashMap::default();
-        for rev_dep in of.transitive_reverse_dependencies(db) {
-            let root_file = rev_dep.root_file(db);
-            let source_root_id = db.file_source_root(root_file);
-            let source_root = db.source_root(source_root_id);
-            entries.extend(source_root.iter().map(|id| (id, None)));
-        }
+        let mut insert_modules = |of: hir::Crate| {
+            entries.extend(of.modules(db).into_iter().filter_map(|module| {
+                match module.definition_source(db) {
+                    InFile { file_id, value: ModuleSource::SourceFile(..) } => {
+                        Some((file_id.original_file(db), None))
+                    }
+                    _ => None,
+                }
+            }));
+        };
+        insert_modules(of);
+        of.transitive_reverse_dependencies(db).into_iter().for_each(insert_modules);
         SearchScope { entries }
     }