@@ -2284,6 +2284,33 @@ pub struct FnSig {
2284
2284
pub span : Span ,
2285
2285
}
2286
2286
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
+
2287
2314
/// A constraint on an associated item.
2288
2315
///
2289
2316
/// ### Examples
@@ -3534,12 +3561,12 @@ impl Extern {
3534
3561
/// included in this struct (e.g., `async unsafe fn` or `const extern "C" fn`).
3535
3562
#[ derive( Clone , Copy , Encodable , Decodable , Debug , Walkable ) ]
3536
3563
pub 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 > ,
3541
3564
/// The `const` keyword, if any
3542
3565
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 ,
3543
3570
/// The `extern` keyword and corresponding ABI string, if any.
3544
3571
pub ext : Extern ,
3545
3572
}
@@ -3553,38 +3580,6 @@ impl FnHeader {
3553
3580
|| matches ! ( constness, Const :: Yes ( _) )
3554
3581
|| !matches ! ( ext, Extern :: None )
3555
3582
}
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
- }
3588
3583
}
3589
3584
3590
3585
impl Default for FnHeader {
0 commit comments