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