diff options
Diffstat (limited to 'crates/hir_def/src/nameres.rs')
-rw-r--r-- | crates/hir_def/src/nameres.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/crates/hir_def/src/nameres.rs b/crates/hir_def/src/nameres.rs index 0a15fc470..ece5958f4 100644 --- a/crates/hir_def/src/nameres.rs +++ b/crates/hir_def/src/nameres.rs | |||
@@ -197,12 +197,17 @@ impl DefMap { | |||
197 | Arc::new(def_map) | 197 | Arc::new(def_map) |
198 | } | 198 | } |
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( |
201 | db: &dyn DefDatabase, | ||
202 | block_id: BlockId, | ||
203 | ) -> Option<Arc<DefMap>> { | ||
201 | let block: BlockLoc = db.lookup_intern_block(block_id); | 204 | let block: BlockLoc = db.lookup_intern_block(block_id); |
202 | let parent = block.module.def_map(db); | 205 | let parent = block.module.def_map(db); |
203 | 206 | ||
204 | // FIXME: It would be good to just return the parent map when the block has no items, but | 207 | let item_tree = db.item_tree(block.ast_id.file_id); |
205 | // we rely on `def_map.block` in a few places, which is `Some` for the inner `DefMap`. | 208 | if item_tree.inner_items_of_block(block.ast_id.value).is_empty() { |
209 | return None; | ||
210 | } | ||
206 | 211 | ||
207 | let block_info = | 212 | let block_info = |
208 | BlockInfo { block: block_id, parent, parent_module: block.module.local_id }; | 213 | BlockInfo { block: block_id, parent, parent_module: block.module.local_id }; |
@@ -211,7 +216,7 @@ impl DefMap { | |||
211 | def_map.block = Some(block_info); | 216 | def_map.block = Some(block_info); |
212 | 217 | ||
213 | let def_map = collector::collect_defs(db, def_map, Some(block.ast_id)); | 218 | let def_map = collector::collect_defs(db, def_map, Some(block.ast_id)); |
214 | Arc::new(def_map) | 219 | Some(Arc::new(def_map)) |
215 | } | 220 | } |
216 | 221 | ||
217 | fn empty(krate: CrateId, edition: Edition) -> DefMap { | 222 | fn empty(krate: CrateId, edition: Edition) -> DefMap { |