diff options
Diffstat (limited to 'crates/hir_def/src/data.rs')
-rw-r--r-- | crates/hir_def/src/data.rs | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/crates/hir_def/src/data.rs b/crates/hir_def/src/data.rs index aea53d527..e3bb9de08 100644 --- a/crates/hir_def/src/data.rs +++ b/crates/hir_def/src/data.rs | |||
@@ -261,23 +261,26 @@ fn collect_items( | |||
261 | let ast_id_map = db.ast_id_map(file_id); | 261 | let ast_id_map = db.ast_id_map(file_id); |
262 | let root = db.parse_or_expand(file_id).unwrap(); | 262 | let root = db.parse_or_expand(file_id).unwrap(); |
263 | let call = ast_id_map.get(call.ast_id).to_node(&root); | 263 | let call = ast_id_map.get(call.ast_id).to_node(&root); |
264 | 264 | let res = expander.enter_expand(db, call); | |
265 | if let Some((mark, mac)) = expander.enter_expand(db, call).value { | 265 | |
266 | let src: InFile<ast::MacroItems> = expander.to_source(mac); | 266 | if let Ok(res) = res { |
267 | let item_tree = db.item_tree(src.file_id); | 267 | if let Some((mark, mac)) = res.value { |
268 | let iter = | 268 | let src: InFile<ast::MacroItems> = expander.to_source(mac); |
269 | item_tree.top_level_items().iter().filter_map(ModItem::as_assoc_item); | 269 | let item_tree = db.item_tree(src.file_id); |
270 | items.extend(collect_items( | 270 | let iter = |
271 | db, | 271 | item_tree.top_level_items().iter().filter_map(ModItem::as_assoc_item); |
272 | module, | 272 | items.extend(collect_items( |
273 | expander, | 273 | db, |
274 | iter, | 274 | module, |
275 | src.file_id, | 275 | expander, |
276 | container, | 276 | iter, |
277 | limit - 1, | 277 | src.file_id, |
278 | )); | 278 | container, |
279 | 279 | limit - 1, | |
280 | expander.exit(db, mark); | 280 | )); |
281 | |||
282 | expander.exit(db, mark); | ||
283 | } | ||
281 | } | 284 | } |
282 | } | 285 | } |
283 | } | 286 | } |