From 4e6390bb129f212614eda8a0cd6662d9cb4440f3 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 6 Apr 2022 14:24:06 +0200 Subject: [PATCH] Fix `SearchScope::reverse_dependencies` trying to search more files than necessary --- crates/ide_db/src/search.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/ide_db/src/search.rs b/crates/ide_db/src/search.rs index 4a11fb73cd..63a45aa3ef 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 } }