diff options
Diffstat (limited to 'crates/ra_ide/src/references/search_scope.rs')
-rw-r--r-- | crates/ra_ide/src/references/search_scope.rs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/crates/ra_ide/src/references/search_scope.rs b/crates/ra_ide/src/references/search_scope.rs index 279f57be0..f9bbe64a4 100644 --- a/crates/ra_ide/src/references/search_scope.rs +++ b/crates/ra_ide/src/references/search_scope.rs | |||
@@ -19,10 +19,17 @@ pub struct SearchScope { | |||
19 | } | 19 | } |
20 | 20 | ||
21 | impl SearchScope { | 21 | impl SearchScope { |
22 | fn empty() -> SearchScope { | ||
23 | SearchScope { entries: FxHashMap::default() } | ||
24 | } | ||
25 | |||
22 | pub(crate) fn for_def(def: &NameDefinition, db: &RootDatabase) -> SearchScope { | 26 | pub(crate) fn for_def(def: &NameDefinition, db: &RootDatabase) -> SearchScope { |
23 | let _p = profile("search_scope"); | 27 | let _p = profile("search_scope"); |
24 | 28 | let module = match def.module(db) { | |
25 | let module_src = def.container.definition_source(db); | 29 | Some(it) => it, |
30 | None => return SearchScope::empty(), | ||
31 | }; | ||
32 | let module_src = module.definition_source(db); | ||
26 | let file_id = module_src.file_id.original_file(db); | 33 | let file_id = module_src.file_id.original_file(db); |
27 | 34 | ||
28 | if let NameKind::Local(var) = def.kind { | 35 | if let NameKind::Local(var) = def.kind { |
@@ -39,7 +46,7 @@ impl SearchScope { | |||
39 | let vis = def.visibility.as_ref().map(|v| v.syntax().to_string()).unwrap_or_default(); | 46 | let vis = def.visibility.as_ref().map(|v| v.syntax().to_string()).unwrap_or_default(); |
40 | 47 | ||
41 | if vis.as_str() == "pub(super)" { | 48 | if vis.as_str() == "pub(super)" { |
42 | if let Some(parent_module) = def.container.parent(db) { | 49 | if let Some(parent_module) = module.parent(db) { |
43 | let mut res = FxHashMap::default(); | 50 | let mut res = FxHashMap::default(); |
44 | let parent_src = parent_module.definition_source(db); | 51 | let parent_src = parent_module.definition_source(db); |
45 | let file_id = parent_src.file_id.original_file(db); | 52 | let file_id = parent_src.file_id.original_file(db); |
@@ -72,7 +79,7 @@ impl SearchScope { | |||
72 | return SearchScope::new(res); | 79 | return SearchScope::new(res); |
73 | } | 80 | } |
74 | if vis.as_str() == "pub" { | 81 | if vis.as_str() == "pub" { |
75 | let krate = def.container.krate(); | 82 | let krate = module.krate(); |
76 | for rev_dep in krate.reverse_dependencies(db) { | 83 | for rev_dep in krate.reverse_dependencies(db) { |
77 | let root_file = rev_dep.root_file(db); | 84 | let root_file = rev_dep.root_file(db); |
78 | let source_root_id = db.file_source_root(root_file); | 85 | let source_root_id = db.file_source_root(root_file); |