@@ -910,27 +910,34 @@ impl<'hir> Map<'hir> {
910
910
}
911
911
}
912
912
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
+
913
927
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
+ }
927
937
}
928
938
929
939
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) ) )
934
941
}
935
942
936
943
/// Given a node ID, gets a list of attributes associated with the AST
0 commit comments