diff options
Diffstat (limited to 'crates/hir_def/src/nameres.rs')
-rw-r--r-- | crates/hir_def/src/nameres.rs | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/crates/hir_def/src/nameres.rs b/crates/hir_def/src/nameres.rs index 005b36e02..6169b3bbc 100644 --- a/crates/hir_def/src/nameres.rs +++ b/crates/hir_def/src/nameres.rs | |||
@@ -199,16 +199,10 @@ impl DefMap { | |||
199 | 199 | ||
200 | pub(crate) fn block_def_map_query(db: &dyn DefDatabase, block_id: BlockId) -> Arc<DefMap> { | 200 | pub(crate) fn block_def_map_query(db: &dyn DefDatabase, block_id: BlockId) -> Arc<DefMap> { |
201 | let block: BlockLoc = db.lookup_intern_block(block_id); | 201 | let block: BlockLoc = db.lookup_intern_block(block_id); |
202 | let item_tree = db.item_tree(block.ast_id.file_id); | ||
203 | let block_items = item_tree.inner_items_of_block(block.ast_id.value); | ||
204 | |||
205 | let parent = block.module.def_map(db); | 202 | let parent = block.module.def_map(db); |
206 | 203 | ||
207 | if block_items.is_empty() { | 204 | // FIXME: It would be good to just return the parent map when the block has no items, but |
208 | // If there are no inner items, nothing new is brought into scope, so we can just return | 205 | // we rely on `def_map.block` in a few places, which is `Some` for the inner `DefMap`. |
209 | // the parent DefMap. This keeps DefMap parent chains short. | ||
210 | return parent; | ||
211 | } | ||
212 | 206 | ||
213 | let block_info = | 207 | let block_info = |
214 | BlockInfo { block: block_id, parent, parent_module: block.module.local_id }; | 208 | BlockInfo { block: block_id, parent, parent_module: block.module.local_id }; |
@@ -216,7 +210,7 @@ impl DefMap { | |||
216 | let mut def_map = DefMap::empty(block.module.krate, block_info.parent.edition); | 210 | let mut def_map = DefMap::empty(block.module.krate, block_info.parent.edition); |
217 | def_map.block = Some(block_info); | 211 | def_map.block = Some(block_info); |
218 | 212 | ||
219 | let def_map = collector::collect_defs(db, def_map, Some(block.ast_id.value)); | 213 | let def_map = collector::collect_defs(db, def_map, Some(block.ast_id)); |
220 | Arc::new(def_map) | 214 | Arc::new(def_map) |
221 | } | 215 | } |
222 | 216 | ||