@@ -853,61 +853,30 @@ impl<'hir> Map<'hir> {
853853 /// This is used by `tcx.get_span`
854854 pub fn span ( & self , hir_id : HirId ) -> Span {
855855 match self . find_entry ( hir_id) . map ( |entry| entry. node ) {
856- Some ( Node :: Param ( param) ) => param. span ,
857- Some ( Node :: Item ( item) ) => match & item. kind {
858- ItemKind :: Fn ( sig, _, _) => sig. span ,
859- _ => item. span ,
860- } ,
861- Some ( Node :: ForeignItem ( foreign_item) ) => foreign_item. span ,
862- Some ( Node :: TraitItem ( trait_item) ) => match & trait_item. kind {
863- TraitItemKind :: Fn ( sig, _) => sig. span ,
864- _ => trait_item. span ,
865- } ,
866- Some ( Node :: ImplItem ( impl_item) ) => match & impl_item. kind {
867- ImplItemKind :: Fn ( sig, _) => sig. span ,
868- _ => impl_item. span ,
869- } ,
870- Some ( Node :: Variant ( variant) ) => variant. span ,
871- Some ( Node :: Field ( field) ) => field. span ,
872- Some ( Node :: AnonConst ( constant) ) => self . body ( constant. body ) . value . span ,
873- Some ( Node :: Expr ( expr) ) => expr. span ,
874- Some ( Node :: Stmt ( stmt) ) => stmt. span ,
875- Some ( Node :: PathSegment ( seg) ) => seg. ident . span ,
876- Some ( Node :: Ty ( ty) ) => ty. span ,
877- Some ( Node :: TraitRef ( tr) ) => tr. path . span ,
878- Some ( Node :: Binding ( pat) ) => pat. span ,
879- Some ( Node :: Pat ( pat) ) => pat. span ,
880- Some ( Node :: Arm ( arm) ) => arm. span ,
881- Some ( Node :: Block ( block) ) => block. span ,
882- Some ( Node :: Ctor ( ..) ) => match self . find ( self . get_parent_node ( hir_id) ) {
883- Some ( Node :: Item ( item) ) => item. span ,
884- Some ( Node :: Variant ( variant) ) => variant. span ,
885- _ => unreachable ! ( ) ,
886- } ,
887- Some ( Node :: Lifetime ( lifetime) ) => lifetime. span ,
888- Some ( Node :: GenericParam ( param) ) => param. span ,
889- Some ( Node :: Visibility ( & Spanned {
890- node : VisibilityKind :: Restricted { ref path, .. } ,
891- ..
892- } ) ) => path. span ,
893- Some ( Node :: Visibility ( v) ) => bug ! ( "unexpected Visibility {:?}" , v) ,
894- Some ( Node :: Local ( local) ) => local. span ,
895- Some ( Node :: MacroDef ( macro_def) ) => macro_def. span ,
896- Some ( Node :: Crate ( item) ) => item. span ,
897- None => bug ! ( "hir::map::Map::span: id not in map: {:?}" , hir_id) ,
898- }
856+ Some ( Node :: Item ( item) ) => {
857+ if let ItemKind :: Fn ( sig, _, _) = & item. kind {
858+ return sig. span ;
859+ }
860+ }
861+ Some ( Node :: TraitItem ( item) ) => {
862+ if let TraitItemKind :: Fn ( sig, _) = & item. kind {
863+ return sig. span ;
864+ }
865+ }
866+ Some ( Node :: ImplItem ( item) ) => {
867+ if let ImplItemKind :: Fn ( sig, _) = & item. kind {
868+ return sig. span ;
869+ }
870+ }
871+ _ => { }
872+ } ;
873+ self . tcx . hir_owner_spans ( hir_id. owner ) [ hir_id. local_id ]
899874 }
900875
901876 /// Like `hir.span()`, but includes the body of function items
902877 /// (instead of just the function header)
903878 pub fn span_with_body ( & self , hir_id : HirId ) -> Span {
904- match self . find_entry ( hir_id) . map ( |entry| entry. node ) {
905- Some ( Node :: TraitItem ( item) ) => item. span ,
906- Some ( Node :: ImplItem ( impl_item) ) => impl_item. span ,
907- Some ( Node :: Item ( item) ) => item. span ,
908- Some ( _) => self . span ( hir_id) ,
909- _ => bug ! ( "hir::map::Map::span_with_body: id not in map: {:?}" , hir_id) ,
910- }
879+ self . tcx . hir_owner_spans ( hir_id. owner ) [ hir_id. local_id ]
911880 }
912881
913882 pub fn span_if_local ( & self , id : DefId ) -> Option < Span > {
0 commit comments