@@ -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 {
@@ -847,27 +866,9 @@ impl<'hir> Map<'hir> {
847
866
}
848
867
849
868
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) ;
871
872
}
872
873
873
874
let span = match self . tcx . opt_hir_node ( hir_id) ? {
@@ -934,10 +935,10 @@ impl<'hir> Map<'hir> {
934
935
// SyntaxContext of the path.
935
936
path. span . find_ancestor_in_same_ctxt ( item. span ) . unwrap_or ( item. span )
936
937
}
937
- _ => named_span ( item. span , item. ident , item. kind . generics ( ) ) ,
938
+ _ => named_span ( item. span , item. ident , item. kind . generics ( ) . map ( |g| g . span ) ) ,
938
939
} ,
939
940
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 ) ) ,
941
942
Node :: ForeignItem ( item) => match item. kind {
942
943
ForeignItemKind :: Fn ( decl, _, _) => until_within ( item. span , decl. output . span ( ) ) ,
943
944
_ => named_span ( item. span , item. ident , None ) ,
0 commit comments