From 6d186ec3beff14bc161d1c7b7c98b412c4f833d9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 24 Oct 2019 13:41:25 +0300 Subject: add search scope stuct --- crates/ra_ide_api/src/references/search_scope.rs | 43 +++++++++++++++++------- 1 file changed, 30 insertions(+), 13 deletions(-) (limited to 'crates') diff --git a/crates/ra_ide_api/src/references/search_scope.rs b/crates/ra_ide_api/src/references/search_scope.rs index 21e667c83..1c4fb742f 100644 --- a/crates/ra_ide_api/src/references/search_scope.rs +++ b/crates/ra_ide_api/src/references/search_scope.rs @@ -13,8 +13,26 @@ use crate::db::RootDatabase; use super::{NameDefinition, NameKind}; +pub struct SearchScope { + entries: FxHashSet<(FileId, Option)>, +} + +impl SearchScope { + fn new(entries: FxHashSet<(FileId, Option)>) -> SearchScope { + SearchScope { entries } + } +} + +impl IntoIterator for SearchScope { + type Item = (FileId, Option); + type IntoIter = std::collections::hash_set::IntoIter; + fn into_iter(self) -> Self::IntoIter { + self.entries.into_iter() + } +} + impl NameDefinition { - pub(crate) fn search_scope(&self, db: &RootDatabase) -> FxHashSet<(FileId, Option)> { + pub(crate) fn search_scope(&self, db: &RootDatabase) -> SearchScope { let _p = profile("search_scope"); let module_src = self.container.definition_source(db); @@ -28,7 +46,7 @@ impl NameDefinition { DefWithBody::Static(s) => s.source(db).ast.syntax().text_range(), }; res.insert((file_id, Some(range))); - return res; + return SearchScope::new(res); } let vis = @@ -36,37 +54,36 @@ impl NameDefinition { if vis.as_str() == "pub(super)" { if let Some(parent_module) = self.container.parent(db) { - let mut files = FxHashSet::default(); + let mut res = FxHashSet::default(); let parent_src = parent_module.definition_source(db); let file_id = parent_src.file_id.original_file(db); match parent_src.ast { ModuleSource::Module(m) => { let range = Some(m.syntax().text_range()); - files.insert((file_id, range)); + res.insert((file_id, range)); } ModuleSource::SourceFile(_) => { - files.insert((file_id, None)); - files.extend(parent_module.children(db).map(|m| { + res.insert((file_id, None)); + res.extend(parent_module.children(db).map(|m| { let src = m.definition_source(db); (src.file_id.original_file(db), None) })); } } - return files; + return SearchScope::new(res); } } if vis.as_str() != "" { let source_root_id = db.file_source_root(file_id); let source_root = db.source_root(source_root_id); - let mut files = - source_root.walk().map(|id| (id.into(), None)).collect::>(); + let mut res = source_root.walk().map(|id| (id.into(), None)).collect::>(); // FIXME: add "pub(in path)" if vis.as_str() == "pub(crate)" { - return files; + return SearchScope::new(res); } if vis.as_str() == "pub" { let krate = self.container.krate(db).unwrap(); @@ -77,10 +94,10 @@ impl NameDefinition { let root_file = crate_graph.crate_root(crate_id); let source_root_id = db.file_source_root(root_file); let source_root = db.source_root(source_root_id); - files.extend(source_root.walk().map(|id| (id.into(), None))); + res.extend(source_root.walk().map(|id| (id.into(), None))); } } - return files; + return SearchScope::new(res); } } @@ -90,6 +107,6 @@ impl NameDefinition { ModuleSource::SourceFile(_) => None, }; res.insert((file_id, range)); - res + SearchScope::new(res) } } -- cgit v1.2.3