@@ -19,6 +19,25 @@ use rustc_span::symbol::{kw, sym, Ident, Symbol};
19
19
use rustc_span:: { ErrorGuaranteed , Span } ;
20
20
use rustc_target:: spec:: abi:: Abi ;
21
21
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
+
22
41
#[ inline]
23
42
pub fn associated_body ( node : Node < ' _ > ) -> Option < ( LocalDefId , BodyId ) > {
24
43
match node {
@@ -839,29 +858,10 @@ impl<'hir> Map<'hir> {
839
858
}
840
859
841
860
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) ;
863
864
}
864
-
865
865
let span = match self . find ( hir_id) ? {
866
866
// Function-like.
867
867
Node :: Item ( Item { kind : ItemKind :: Fn ( sig, ..) , span : outer_span, .. } )
@@ -926,10 +926,10 @@ impl<'hir> Map<'hir> {
926
926
// SyntaxContext of the path.
927
927
path. span . find_ancestor_in_same_ctxt ( item. span ) . unwrap_or ( item. span )
928
928
}
929
- _ => named_span ( item. span , item. ident , item. kind . generics ( ) ) ,
929
+ _ => named_span ( item. span , item. ident , item. kind . generics ( ) . map ( |g| g . span ) ) ,
930
930
} ,
931
931
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 ) ) ,
933
933
Node :: ForeignItem ( item) => match item. kind {
934
934
ForeignItemKind :: Fn ( decl, _, _) => until_within ( item. span , decl. output . span ( ) ) ,
935
935
_ => named_span ( item. span , item. ident , None ) ,
0 commit comments