aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/find_path.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2020-01-10 17:40:45 +0000
committerFlorian Diebold <[email protected]>2020-01-11 22:33:04 +0000
commit4496e2a06a91e5825f355ce730af802643e8018a (patch)
treef0f41e2d9ff5045f34b38cd3d23bae11e5d56139 /crates/ra_hir_def/src/find_path.rs
parent15fc643e05bf8273e378243edbfb3be7aea7ce11 (diff)
Apply review suggestions
Diffstat (limited to 'crates/ra_hir_def/src/find_path.rs')
-rw-r--r--crates/ra_hir_def/src/find_path.rs17
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. 164fn importable_locations_in_crate(
165pub(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)]