@@ -910,27 +910,34 @@ impl<'hir> Map<'hir> {
910910 }
911911 }
912912
913+ pub ( super ) fn opt_ident_span ( self , id : HirId ) -> Option < Span > {
914+ let ident = match self . get ( id) {
915+ // A `Ctor` doesn't have an identifier itself, but its parent
916+ // struct/variant does. Compare with `hir::Map::opt_span`.
917+ Node :: Ctor ( ..) => match self . find ( self . get_parent_node ( id) ) ? {
918+ Node :: Item ( item) => Some ( item. ident ) ,
919+ Node :: Variant ( variant) => Some ( variant. ident ) ,
920+ _ => unreachable ! ( ) ,
921+ } ,
922+ node => node. ident ( ) ,
923+ } ;
924+ ident. map ( |ident| ident. span )
925+ }
926+
913927 pub fn opt_name ( self , id : HirId ) -> Option < Symbol > {
914- Some ( match self . get ( id) {
915- Node :: Item ( i) => i. ident . name ,
916- Node :: ForeignItem ( fi) => fi. ident . name ,
917- Node :: ImplItem ( ii) => ii. ident . name ,
918- Node :: TraitItem ( ti) => ti. ident . name ,
919- Node :: Variant ( v) => v. ident . name ,
920- Node :: Field ( f) => f. ident . name ,
921- Node :: Lifetime ( lt) => lt. name . ident ( ) . name ,
922- Node :: GenericParam ( param) => param. name . ident ( ) . name ,
923- Node :: Binding ( & Pat { kind : PatKind :: Binding ( _, _, l, _) , .. } ) => l. name ,
924- Node :: Ctor ( ..) => self . name ( HirId :: make_owner ( self . get_parent_item ( id) ) ) ,
925- _ => return None ,
926- } )
928+ match self . get ( id) {
929+ Node :: Binding ( & Pat { kind : PatKind :: Binding ( _, _, l, _) , .. } ) => Some ( l. name ) ,
930+ Node :: Ctor ( ..) => match self . find ( self . get_parent_node ( id) ) ? {
931+ Node :: Item ( item) => Some ( item. ident . name ) ,
932+ Node :: Variant ( variant) => Some ( variant. ident . name ) ,
933+ _ => unreachable ! ( ) ,
934+ } ,
935+ node => node. ident ( ) . map ( |i| i. name ) ,
936+ }
927937 }
928938
929939 pub fn name ( self , id : HirId ) -> Symbol {
930- match self . opt_name ( id) {
931- Some ( name) => name,
932- None => bug ! ( "no name for {}" , self . node_to_string( id) ) ,
933- }
940+ self . opt_name ( id) . unwrap_or_else ( || bug ! ( "no name for {}" , self . node_to_string( id) ) )
934941 }
935942
936943 /// Given a node ID, gets a list of attributes associated with the AST
0 commit comments