@@ -2284,6 +2284,33 @@ pub struct FnSig {
22842284    pub  span :  Span , 
22852285} 
22862286
2287+ impl  FnSig  { 
2288+     /// Return a span encompassing the header, or where to insert it if empty. 
2289+ pub  fn  header_span ( & self )  -> Span  { 
2290+         match  self . header . ext  { 
2291+             Extern :: Implicit ( span)  | Extern :: Explicit ( _,  span)  => { 
2292+                 return  self . span . with_hi ( span. hi ( ) ) ; 
2293+             } 
2294+             Extern :: None  => { } 
2295+         } 
2296+ 
2297+         match  self . header . safety  { 
2298+             Safety :: Unsafe ( span)  | Safety :: Safe ( span)  => return  self . span . with_hi ( span. hi ( ) ) , 
2299+             Safety :: Default  => { } 
2300+         } ; 
2301+ 
2302+         if  let  Some ( coroutine_kind)  = self . header . coroutine_kind  { 
2303+             return  self . span . with_hi ( coroutine_kind. span ( ) . hi ( ) ) ; 
2304+         } 
2305+ 
2306+         if  let  Const :: Yes ( span)  = self . header . constness  { 
2307+             return  self . span . with_hi ( span. hi ( ) ) ; 
2308+         } 
2309+ 
2310+         self . span . shrink_to_lo ( ) 
2311+     } 
2312+ } 
2313+ 
22872314/// A constraint on an associated item. 
22882315/// 
22892316/// ### Examples 
@@ -3534,12 +3561,12 @@ impl Extern {
35343561/// included in this struct (e.g., `async unsafe fn` or `const extern "C" fn`). 
35353562#[ derive( Clone ,  Copy ,  Encodable ,  Decodable ,  Debug ,  Walkable ) ]  
35363563pub  struct  FnHeader  { 
3537-     /// Whether this is `unsafe`, or has a default safety. 
3538- pub  safety :  Safety , 
3539-     /// Whether this is `async`, `gen`, or nothing. 
3540- pub  coroutine_kind :  Option < CoroutineKind > , 
35413564    /// The `const` keyword, if any 
35423565pub  constness :  Const , 
3566+     /// Whether this is `async`, `gen`, or nothing. 
3567+ pub  coroutine_kind :  Option < CoroutineKind > , 
3568+     /// Whether this is `unsafe`, or has a default safety. 
3569+ pub  safety :  Safety , 
35433570    /// The `extern` keyword and corresponding ABI string, if any. 
35443571pub  ext :  Extern , 
35453572} 
@@ -3553,38 +3580,6 @@ impl FnHeader {
35533580            || matches ! ( constness,  Const :: Yes ( _) ) 
35543581            || !matches ! ( ext,  Extern :: None ) 
35553582    } 
3556- 
3557-     /// Return a span encompassing the header, or none if all options are default. 
3558- pub  fn  span ( & self )  -> Option < Span >  { 
3559-         fn  append ( a :  & mut  Option < Span > ,  b :  Span )  { 
3560-             * a = match  a { 
3561-                 None  => Some ( b) , 
3562-                 Some ( x)  => Some ( x. to ( b) ) , 
3563-             } 
3564-         } 
3565- 
3566-         let  mut  full_span = None ; 
3567- 
3568-         match  self . safety  { 
3569-             Safety :: Unsafe ( span)  | Safety :: Safe ( span)  => append ( & mut  full_span,  span) , 
3570-             Safety :: Default  => { } 
3571-         } ; 
3572- 
3573-         if  let  Some ( coroutine_kind)  = self . coroutine_kind  { 
3574-             append ( & mut  full_span,  coroutine_kind. span ( ) ) ; 
3575-         } 
3576- 
3577-         if  let  Const :: Yes ( span)  = self . constness  { 
3578-             append ( & mut  full_span,  span) ; 
3579-         } 
3580- 
3581-         match  self . ext  { 
3582-             Extern :: Implicit ( span)  | Extern :: Explicit ( _,  span)  => append ( & mut  full_span,  span) , 
3583-             Extern :: None  => { } 
3584-         } 
3585- 
3586-         full_span
3587-     } 
35883583} 
35893584
35903585impl  Default  for  FnHeader  { 
0 commit comments