@@ -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
35423565 pub 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.
35443571 pub 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