@@ -61,7 +61,7 @@ pub struct ParentHirIterator<'hir> {
6161}
6262
6363impl < ' hir > Iterator for ParentHirIterator < ' hir > {
64- type Item = ( HirId , Node < ' hir > ) ;
64+ type Item = HirId ;
6565
6666 fn next ( & mut self ) -> Option < Self :: Item > {
6767 if self . current_id == CRATE_HIR_ID {
@@ -77,10 +77,7 @@ impl<'hir> Iterator for ParentHirIterator<'hir> {
7777 }
7878
7979 self . current_id = parent_id;
80- if let Some ( node) = self . map . find ( parent_id) {
81- return Some ( ( parent_id, node) ) ;
82- }
83- // If this `HirId` doesn't have an entry, skip it and look for its `parent_id`.
80+ return Some ( parent_id) ;
8481 }
8582 }
8683}
@@ -393,8 +390,8 @@ impl<'hir> Map<'hir> {
393390 }
394391
395392 pub fn enclosing_body_owner ( self , hir_id : HirId ) -> LocalDefId {
396- for ( parent , _ ) in self . parent_iter ( hir_id) {
397- if let Some ( body) = self . find ( parent ) . map ( associated_body) . flatten ( ) {
393+ for ( _ , node ) in self . parent_iter ( hir_id) {
394+ if let Some ( body) = associated_body ( node ) {
398395 return self . body_owner_def_id ( body) ;
399396 }
400397 }
@@ -635,10 +632,17 @@ impl<'hir> Map<'hir> {
635632 /// Returns an iterator for the nodes in the ancestor tree of the `current_id`
636633 /// until the crate root is reached. Prefer this over your own loop using `get_parent_node`.
637634 #[ inline]
638- pub fn parent_iter ( self , current_id : HirId ) -> ParentHirIterator < ' hir > {
635+ pub fn parent_id_iter ( self , current_id : HirId ) -> impl Iterator < Item = HirId > + ' hir {
639636 ParentHirIterator { current_id, map : self }
640637 }
641638
639+ /// Returns an iterator for the nodes in the ancestor tree of the `current_id`
640+ /// until the crate root is reached. Prefer this over your own loop using `get_parent_node`.
641+ #[ inline]
642+ pub fn parent_iter ( self , current_id : HirId ) -> impl Iterator < Item = ( HirId , Node < ' hir > ) > {
643+ self . parent_id_iter ( current_id) . filter_map ( move |id| Some ( ( id, self . find ( id) ?) ) )
644+ }
645+
642646 /// Returns an iterator for the nodes in the ancestor tree of the `current_id`
643647 /// until the crate root is reached. Prefer this over your own loop using `get_parent_node`.
644648 #[ inline]
0 commit comments