@@ -8,9 +8,10 @@ use rustc_hir::{ExprKind, HirId, Item, ItemKind, Mod, Node, QPath};
88use rustc_middle:: hir:: nested_filter;
99use rustc_middle:: ty:: TyCtxt ;
1010use rustc_span:: hygiene:: MacroKind ;
11- use rustc_span:: { BytePos , ExpnKind , Span } ;
11+ use rustc_span:: { BytePos , ExpnKind } ;
1212
1313use crate :: clean:: { self , PrimitiveType , rustc_span} ;
14+ use crate :: html:: highlight:: Span ;
1415use crate :: html:: sources;
1516
1617/// This enum allows us to store two different kinds of information:
@@ -96,7 +97,7 @@ impl SpanMapVisitor<'_> {
9697 } )
9798 . unwrap_or ( path. span )
9899 } ;
99- self . matches . insert ( span, link) ;
100+ self . matches . insert ( span. into ( ) , link) ;
100101 }
101102 Res :: Local ( _) if let Some ( span) = self . tcx . hir_res_span ( path. res ) => {
102103 let path_span = if only_use_last_segment
@@ -106,11 +107,12 @@ impl SpanMapVisitor<'_> {
106107 } else {
107108 path. span
108109 } ;
109- self . matches . insert ( path_span, LinkFromSrc :: Local ( clean:: Span :: new ( span) ) ) ;
110+ self . matches . insert ( path_span. into ( ) , LinkFromSrc :: Local ( clean:: Span :: new ( span) ) ) ;
110111 }
111112 Res :: PrimTy ( p) => {
112113 // FIXME: Doesn't handle "path-like" primitives like arrays or tuples.
113- self . matches . insert ( path. span , LinkFromSrc :: Primitive ( PrimitiveType :: from ( p) ) ) ;
114+ self . matches
115+ . insert ( path. span . into ( ) , LinkFromSrc :: Primitive ( PrimitiveType :: from ( p) ) ) ;
114116 }
115117 Res :: Err => { }
116118 _ => { }
@@ -127,7 +129,7 @@ impl SpanMapVisitor<'_> {
127129 if cspan. inner ( ) . is_dummy ( ) || cspan. cnum ( self . tcx . sess ) != LOCAL_CRATE {
128130 return ;
129131 }
130- self . matches . insert ( span, LinkFromSrc :: Doc ( item. owner_id . to_def_id ( ) ) ) ;
132+ self . matches . insert ( span. into ( ) , LinkFromSrc :: Doc ( item. owner_id . to_def_id ( ) ) ) ;
131133 }
132134 }
133135
@@ -138,7 +140,7 @@ impl SpanMapVisitor<'_> {
138140 /// so, we loop until we find the macro definition by using `outer_expn_data` in a loop.
139141 /// Finally, we get the information about the macro itself (`span` if "local", `DefId`
140142 /// otherwise) and store it inside the span map.
141- fn handle_macro ( & mut self , span : Span ) -> bool {
143+ fn handle_macro ( & mut self , span : rustc_span :: Span ) -> bool {
142144 if !span. from_expansion ( ) {
143145 return false ;
144146 }
@@ -176,7 +178,7 @@ impl SpanMapVisitor<'_> {
176178 // The "call_site" includes the whole macro with its "arguments". We only want
177179 // the macro name.
178180 let new_span = new_span. with_hi ( new_span. lo ( ) + BytePos ( macro_name. len ( ) as u32 ) ) ;
179- self . matches . insert ( new_span, link_from_src) ;
181+ self . matches . insert ( new_span. into ( ) , link_from_src) ;
180182 true
181183 }
182184
@@ -233,7 +235,7 @@ impl<'tcx> Visitor<'tcx> for SpanMapVisitor<'tcx> {
233235 intravisit:: walk_path ( self , path) ;
234236 }
235237
236- fn visit_qpath ( & mut self , qpath : & QPath < ' tcx > , id : HirId , _span : Span ) {
238+ fn visit_qpath ( & mut self , qpath : & QPath < ' tcx > , id : HirId , _span : rustc_span :: Span ) {
237239 match * qpath {
238240 QPath :: TypeRelative ( qself, path) => {
239241 if matches ! ( path. res, Res :: Err ) {
@@ -249,7 +251,7 @@ impl<'tcx> Visitor<'tcx> for SpanMapVisitor<'tcx> {
249251 self . handle_path ( & path, false ) ;
250252 }
251253 } else {
252- self . infer_id ( path. hir_id , Some ( id) , path. ident . span ) ;
254+ self . infer_id ( path. hir_id , Some ( id) , path. ident . span . into ( ) ) ;
253255 }
254256
255257 rustc_ast:: visit:: try_visit!( self . visit_ty_unambig( qself) ) ;
@@ -267,16 +269,18 @@ impl<'tcx> Visitor<'tcx> for SpanMapVisitor<'tcx> {
267269 }
268270 }
269271
270- fn visit_mod ( & mut self , m : & ' tcx Mod < ' tcx > , span : Span , id : HirId ) {
272+ fn visit_mod ( & mut self , m : & ' tcx Mod < ' tcx > , span : rustc_span :: Span , id : HirId ) {
271273 // To make the difference between "mod foo {}" and "mod foo;". In case we "import" another
272274 // file, we want to link to it. Otherwise no need to create a link.
273275 if !span. overlaps ( m. spans . inner_span ) {
274276 // Now that we confirmed it's a file import, we want to get the span for the module
275277 // name only and not all the "mod foo;".
276278 if let Node :: Item ( item) = self . tcx . hir_node ( id) {
277279 let ( ident, _) = item. expect_mod ( ) ;
278- self . matches
279- . insert ( ident. span , LinkFromSrc :: Local ( clean:: Span :: new ( m. spans . inner_span ) ) ) ;
280+ self . matches . insert (
281+ ident. span . into ( ) ,
282+ LinkFromSrc :: Local ( clean:: Span :: new ( m. spans . inner_span ) ) ,
283+ ) ;
280284 }
281285 } else {
282286 // If it's a "mod foo {}", we want to look to its documentation page.
@@ -288,9 +292,9 @@ impl<'tcx> Visitor<'tcx> for SpanMapVisitor<'tcx> {
288292 fn visit_expr ( & mut self , expr : & ' tcx rustc_hir:: Expr < ' tcx > ) {
289293 match expr. kind {
290294 ExprKind :: MethodCall ( segment, ..) => {
291- self . infer_id ( segment. hir_id , Some ( expr. hir_id ) , segment. ident . span )
295+ self . infer_id ( segment. hir_id , Some ( expr. hir_id ) , segment. ident . span . into ( ) )
292296 }
293- ExprKind :: Call ( call, ..) => self . infer_id ( call. hir_id , None , call. span ) ,
297+ ExprKind :: Call ( call, ..) => self . infer_id ( call. hir_id , None , call. span . into ( ) ) ,
294298 _ => {
295299 if self . handle_macro ( expr. span ) {
296300 // We don't want to go deeper into the macro.
0 commit comments