@@ -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 {
@@ -847,27 +866,9 @@ impl<'hir> Map<'hir> {
847866 }
848867
849868 pub fn opt_span ( self , hir_id : HirId ) -> Option < Span > {
850- fn until_within ( outer : Span , end : Span ) -> Span {
851- if let Some ( end) = end. find_ancestor_inside ( outer) {
852- outer. with_hi ( end. hi ( ) )
853- } else {
854- outer
855- }
856- }
857-
858- fn named_span ( item_span : Span , ident : Ident , generics : Option < & Generics < ' _ > > ) -> Span {
859- if ident. name != kw:: Empty {
860- let mut span = until_within ( item_span, ident. span ) ;
861- if let Some ( g) = generics
862- && !g. span . is_dummy ( )
863- && let Some ( g_span) = g. span . find_ancestor_inside ( item_span)
864- {
865- span = span. to ( g_span) ;
866- }
867- span
868- } else {
869- item_span
870- }
869+ if let Some ( owner) = hir_id. as_owner ( ) {
870+ let span = self . tcx . def_span ( owner. def_id ) ;
871+ return Some ( span) ;
871872 }
872873
873874 let span = match self . tcx . opt_hir_node ( hir_id) ? {
@@ -934,10 +935,10 @@ impl<'hir> Map<'hir> {
934935 // SyntaxContext of the path.
935936 path. span . find_ancestor_in_same_ctxt ( item. span ) . unwrap_or ( item. span )
936937 }
937- _ => named_span ( item. span , item. ident , item. kind . generics ( ) ) ,
938+ _ => named_span ( item. span , item. ident , item. kind . generics ( ) . map ( |g| g . span ) ) ,
938939 } ,
939940 Node :: Variant ( variant) => named_span ( variant. span , variant. ident , None ) ,
940- Node :: ImplItem ( item) => named_span ( item. span , item. ident , Some ( item. generics ) ) ,
941+ Node :: ImplItem ( item) => named_span ( item. span , item. ident , Some ( item. generics . span ) ) ,
941942 Node :: ForeignItem ( item) => match item. kind {
942943 ForeignItemKind :: Fn ( decl, _, _) => until_within ( item. span , decl. output . span ( ) ) ,
943944 _ => named_span ( item. span , item. ident , None ) ,
0 commit comments