@@ -19,6 +19,25 @@ use rustc_span::symbol::{kw, sym, Ident, Symbol};
1919use rustc_span:: { ErrorGuaranteed , Span } ;
2020use rustc_target:: spec:: abi:: Abi ;
2121
22+ pub fn until_within ( outer : Span , end : Span ) -> Span {
23+ if let Some ( end) = end. find_ancestor_inside ( outer) { outer. with_hi ( end. hi ( ) ) } else { outer }
24+ }
25+
26+ pub fn named_span ( item_span : Span , ident : Ident , generics_span : Option < Span > ) -> Span {
27+ if ident. name != kw:: Empty {
28+ let mut span = until_within ( item_span, ident. span ) ;
29+ if let Some ( g) = generics_span
30+ && !g. is_dummy ( )
31+ && let Some ( g_span) = g. find_ancestor_inside ( item_span)
32+ {
33+ span = span. to ( g_span) ;
34+ }
35+ span
36+ } else {
37+ item_span
38+ }
39+ }
40+
2241#[ inline]
2342pub fn associated_body ( node : Node < ' _ > ) -> Option < ( LocalDefId , BodyId ) > {
2443 match node {
@@ -839,29 +858,10 @@ impl<'hir> Map<'hir> {
839858 }
840859
841860 pub fn opt_span ( self , hir_id : HirId ) -> Option < Span > {
842- fn until_within ( outer : Span , end : Span ) -> Span {
843- if let Some ( end) = end. find_ancestor_inside ( outer) {
844- outer. with_hi ( end. hi ( ) )
845- } else {
846- outer
847- }
848- }
849-
850- fn named_span ( item_span : Span , ident : Ident , generics : Option < & Generics < ' _ > > ) -> Span {
851- if ident. name != kw:: Empty {
852- let mut span = until_within ( item_span, ident. span ) ;
853- if let Some ( g) = generics
854- && !g. span . is_dummy ( )
855- && let Some ( g_span) = g. span . find_ancestor_inside ( item_span)
856- {
857- span = span. to ( g_span) ;
858- }
859- span
860- } else {
861- item_span
862- }
861+ if let Some ( owner) = hir_id. as_owner ( ) {
862+ let span = self . tcx . def_span ( owner. def_id ) ;
863+ return Some ( span) ;
863864 }
864-
865865 let span = match self . find ( hir_id) ? {
866866 // Function-like.
867867 Node :: Item ( Item { kind : ItemKind :: Fn ( sig, ..) , span : outer_span, .. } )
@@ -926,10 +926,10 @@ impl<'hir> Map<'hir> {
926926 // SyntaxContext of the path.
927927 path. span . find_ancestor_in_same_ctxt ( item. span ) . unwrap_or ( item. span )
928928 }
929- _ => named_span ( item. span , item. ident , item. kind . generics ( ) ) ,
929+ _ => named_span ( item. span , item. ident , item. kind . generics ( ) . map ( |g| g . span ) ) ,
930930 } ,
931931 Node :: Variant ( variant) => named_span ( variant. span , variant. ident , None ) ,
932- Node :: ImplItem ( item) => named_span ( item. span , item. ident , Some ( item. generics ) ) ,
932+ Node :: ImplItem ( item) => named_span ( item. span , item. ident , Some ( item. generics . span ) ) ,
933933 Node :: ForeignItem ( item) => match item. kind {
934934 ForeignItemKind :: Fn ( decl, _, _) => until_within ( item. span , decl. output . span ( ) ) ,
935935 _ => named_span ( item. span , item. ident , None ) ,
0 commit comments