diff options
Diffstat (limited to 'crates/ra_hir_def/src/find_path.rs')
-rw-r--r-- | crates/ra_hir_def/src/find_path.rs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/crates/ra_hir_def/src/find_path.rs b/crates/ra_hir_def/src/find_path.rs index 69cdfc943..f7dc8acb7 100644 --- a/crates/ra_hir_def/src/find_path.rs +++ b/crates/ra_hir_def/src/find_path.rs | |||
@@ -34,7 +34,7 @@ fn find_path_inner( | |||
34 | // - if the item is already in scope, return the name under which it is | 34 | // - if the item is already in scope, return the name under which it is |
35 | let def_map = db.crate_def_map(from.krate); | 35 | let def_map = db.crate_def_map(from.krate); |
36 | let from_scope: &crate::item_scope::ItemScope = &def_map.modules[from.local_id].scope; | 36 | let from_scope: &crate::item_scope::ItemScope = &def_map.modules[from.local_id].scope; |
37 | if let Some((name, _)) = from_scope.reverse_get(item) { | 37 | if let Some((name, _)) = from_scope.name_of(item) { |
38 | return Some(ModPath::from_simple_segments(PathKind::Plain, vec![name.clone()])); | 38 | return Some(ModPath::from_simple_segments(PathKind::Plain, vec![name.clone()])); |
39 | } | 39 | } |
40 | 40 | ||
@@ -77,7 +77,7 @@ fn find_path_inner( | |||
77 | let prelude_def_map = db.crate_def_map(prelude_module.krate); | 77 | let prelude_def_map = db.crate_def_map(prelude_module.krate); |
78 | let prelude_scope: &crate::item_scope::ItemScope = | 78 | let prelude_scope: &crate::item_scope::ItemScope = |
79 | &prelude_def_map.modules[prelude_module.local_id].scope; | 79 | &prelude_def_map.modules[prelude_module.local_id].scope; |
80 | if let Some((name, vis)) = prelude_scope.reverse_get(item) { | 80 | if let Some((name, vis)) = prelude_scope.name_of(item) { |
81 | if vis.is_visible_from(db, from) { | 81 | if vis.is_visible_from(db, from) { |
82 | return Some(ModPath::from_simple_segments(PathKind::Plain, vec![name.clone()])); | 82 | return Some(ModPath::from_simple_segments(PathKind::Plain, vec![name.clone()])); |
83 | } | 83 | } |
@@ -146,7 +146,7 @@ fn find_importable_locations( | |||
146 | .chain(crate_graph.dependencies(from.krate).map(|dep| dep.crate_id)) | 146 | .chain(crate_graph.dependencies(from.krate).map(|dep| dep.crate_id)) |
147 | { | 147 | { |
148 | result.extend( | 148 | result.extend( |
149 | db.importable_locations_in_crate(item, krate) | 149 | importable_locations_in_crate(db, item, krate) |
150 | .iter() | 150 | .iter() |
151 | .filter(|(_, _, vis)| vis.is_visible_from(db, from)) | 151 | .filter(|(_, _, vis)| vis.is_visible_from(db, from)) |
152 | .map(|(m, n, _)| (*m, n.clone())), | 152 | .map(|(m, n, _)| (*m, n.clone())), |
@@ -160,17 +160,16 @@ fn find_importable_locations( | |||
160 | /// non-private `use`s. | 160 | /// non-private `use`s. |
161 | /// | 161 | /// |
162 | /// Note that the crate doesn't need to be the one in which the item is defined; | 162 | /// Note that the crate doesn't need to be the one in which the item is defined; |
163 | /// it might be re-exported in other crates. We cache this as a query since we | 163 | /// it might be re-exported in other crates. |
164 | /// need to walk the whole def map for it. | 164 | fn importable_locations_in_crate( |
165 | pub(crate) fn importable_locations_in_crate_query( | ||
166 | db: &impl DefDatabase, | 165 | db: &impl DefDatabase, |
167 | item: ItemInNs, | 166 | item: ItemInNs, |
168 | krate: CrateId, | 167 | krate: CrateId, |
169 | ) -> std::sync::Arc<[(ModuleId, Name, Visibility)]> { | 168 | ) -> Vec<(ModuleId, Name, Visibility)> { |
170 | let def_map = db.crate_def_map(krate); | 169 | let def_map = db.crate_def_map(krate); |
171 | let mut result = Vec::new(); | 170 | let mut result = Vec::new(); |
172 | for (local_id, data) in def_map.modules.iter() { | 171 | for (local_id, data) in def_map.modules.iter() { |
173 | if let Some((name, vis)) = data.scope.reverse_get(item) { | 172 | if let Some((name, vis)) = data.scope.name_of(item) { |
174 | let is_private = if let Visibility::Module(private_to) = vis { | 173 | let is_private = if let Visibility::Module(private_to) = vis { |
175 | private_to.local_id == local_id | 174 | private_to.local_id == local_id |
176 | } else { | 175 | } else { |
@@ -192,7 +191,7 @@ pub(crate) fn importable_locations_in_crate_query( | |||
192 | result.push((ModuleId { krate, local_id }, name.clone(), vis)); | 191 | result.push((ModuleId { krate, local_id }, name.clone(), vis)); |
193 | } | 192 | } |
194 | } | 193 | } |
195 | result.into() | 194 | result |
196 | } | 195 | } |
197 | 196 | ||
198 | #[cfg(test)] | 197 | #[cfg(test)] |