@@ -67,16 +67,11 @@ impl Step {
67
67
match arg_marked_as_step. len ( ) {
68
68
0 => Ok ( None ) ,
69
69
1 => {
70
- // Unwrapping is OK here, because
71
- // `arg_marked_as_step.len() == 1`.
72
- let ( ident, _) =
73
- parse_fn_arg ( arg_marked_as_step. first ( ) . unwrap ( ) ) ?;
70
+ let ( ident, _) = parse_fn_arg ( arg_marked_as_step[ 0 ] ) ?;
74
71
Ok ( Some ( ident. clone ( ) ) )
75
72
}
76
73
_ => Err ( syn:: Error :: new (
77
- // Unwrapping is OK here, because
78
- // `arg_marked_as_step.len() > 1`.
79
- arg_marked_as_step. get ( 1 ) . unwrap ( ) . span ( ) ,
74
+ arg_marked_as_step[ 1 ] . span ( ) ,
80
75
"Only 1 step argument is allowed" ,
81
76
) ) ,
82
77
}
@@ -255,21 +250,23 @@ impl Step {
255
250
:: std:: borrow:: Borrow :: borrow( & __cucumber_ctx. step) ;
256
251
}
257
252
} else {
258
- let ty = match ty {
259
- syn:: Type :: Path ( p) => p,
260
- _ => {
261
- return Err ( syn:: Error :: new (
262
- ty. span ( ) ,
263
- "Type path expected" ,
264
- ) )
265
- }
253
+ let ty = if let syn:: Type :: Path ( p) = ty {
254
+ p
255
+ } else {
256
+ return Err ( syn:: Error :: new ( ty. span ( ) , "Type path expected" ) ) ;
266
257
} ;
267
258
268
259
let not_found_err = format ! ( "{} not found" , ident) ;
269
260
let parsing_err = format ! (
270
261
"{} can not be parsed to {}" ,
271
262
ident,
272
- ty. path. segments. last( ) . unwrap( ) . ident
263
+ ty. path
264
+ . segments
265
+ . last( )
266
+ . ok_or_else( || {
267
+ syn:: Error :: new( ty. path. span( ) , "Type path expected" )
268
+ } ) ?
269
+ . ident,
273
270
) ;
274
271
275
272
quote ! {
@@ -349,15 +346,13 @@ impl Parse for AttributeArgument {
349
346
} ,
350
347
) ?) ;
351
348
352
- Ok ( AttributeArgument :: Regex ( str_lit) )
349
+ Ok ( Self :: Regex ( str_lit) )
353
350
} else {
354
351
Err ( syn:: Error :: new ( arg. span ( ) , "Expected regex argument" ) )
355
352
}
356
353
}
357
354
358
- syn:: NestedMeta :: Lit ( l) => {
359
- Ok ( AttributeArgument :: Literal ( to_string_literal ( l) ?) )
360
- }
355
+ syn:: NestedMeta :: Lit ( l) => Ok ( Self :: Literal ( to_string_literal ( l) ?) ) ,
361
356
362
357
syn:: NestedMeta :: Meta ( _) => Err ( syn:: Error :: new (
363
358
arg. span ( ) ,
@@ -391,13 +386,11 @@ fn remove_all_attrs_if_needed<'a>(
391
386
. iter_mut ( )
392
387
. filter_map ( |arg| {
393
388
if has_other_step_arguments {
394
- if let Some ( attr) = find_attr ( attr_arg, arg) {
395
- return Some ( ( & * arg, attr) ) ;
396
- }
397
- } else if let Some ( attr) = remove_attr ( attr_arg, arg) {
398
- return Some ( ( & * arg, attr) ) ;
389
+ find_attr ( attr_arg, arg)
390
+ } else {
391
+ remove_attr ( attr_arg, arg)
399
392
}
400
- None
393
+ . map ( move |attr| ( & * arg , attr ) )
401
394
} )
402
395
. unzip ( )
403
396
}
@@ -439,8 +432,7 @@ fn remove_attr(attr_arg: &str, arg: &mut syn::FnArg) -> Option<syn::Attribute> {
439
432
440
433
if removed. len ( ) == 1 {
441
434
typed_arg. attrs = other;
442
- // Unwrapping is OK here, because `step_idents.len() == 1`.
443
- return Some ( removed. pop ( ) . unwrap ( ) ) ;
435
+ return removed. pop ( ) ;
444
436
}
445
437
other. append ( & mut removed) ;
446
438
typed_arg. attrs = other;
@@ -462,9 +454,10 @@ fn parse_fn_arg(arg: &syn::FnArg) -> syn::Result<(&syn::Ident, &syn::Type)> {
462
454
}
463
455
} ;
464
456
465
- let ident = match arg. pat . as_ref ( ) {
466
- syn:: Pat :: Ident ( i) => & i. ident ,
467
- _ => return Err ( syn:: Error :: new ( arg. span ( ) , "Expected ident" ) ) ,
457
+ let ident = if let syn:: Pat :: Ident ( i) = arg. pat . as_ref ( ) {
458
+ & i. ident
459
+ } else {
460
+ return Err ( syn:: Error :: new ( arg. span ( ) , "Expected ident" ) ) ;
468
461
} ;
469
462
470
463
Ok ( ( ident, arg. ty . as_ref ( ) ) )
@@ -478,18 +471,23 @@ fn find_first_slice(sig: &syn::Signature) -> Option<&syn::TypePath> {
478
471
syn:: FnArg :: Receiver ( _) => None ,
479
472
}
480
473
. and_then ( |typed_arg| {
481
- match typed_arg. ty . as_ref ( ) {
482
- syn:: Type :: Reference ( r) => Some ( r) ,
483
- _ => None ,
474
+ if let syn:: Type :: Reference ( r) = typed_arg. ty . as_ref ( ) {
475
+ Some ( r)
476
+ } else {
477
+ None
484
478
}
485
479
. and_then ( |ty_ref| {
486
- match ty_ref. elem . as_ref ( ) {
487
- syn:: Type :: Slice ( s) => Some ( s) ,
488
- _ => None ,
480
+ if let syn:: Type :: Slice ( s) = ty_ref. elem . as_ref ( ) {
481
+ Some ( s)
482
+ } else {
483
+ None
489
484
}
490
- . and_then ( |slice| match slice. elem . as_ref ( ) {
491
- syn:: Type :: Path ( ty) => Some ( ty) ,
492
- _ => None ,
485
+ . and_then ( |slice| {
486
+ if let syn:: Type :: Path ( ty) = slice. elem . as_ref ( ) {
487
+ Some ( ty)
488
+ } else {
489
+ None
490
+ }
493
491
} )
494
492
} )
495
493
} )
@@ -505,17 +503,23 @@ fn parse_world_from_args(sig: &syn::Signature) -> syn::Result<&syn::TypePath> {
505
503
syn:: FnArg :: Typed ( a) => Ok ( a) ,
506
504
syn:: FnArg :: Receiver ( _) => Err ( first_arg. span ( ) ) ,
507
505
} )
508
- . and_then ( |typed_arg| match typed_arg. ty . as_ref ( ) {
509
- syn:: Type :: Reference ( r) => Ok ( r) ,
510
- _ => Err ( typed_arg. span ( ) ) ,
506
+ . and_then ( |typed_arg| {
507
+ if let syn:: Type :: Reference ( r) = typed_arg. ty . as_ref ( ) {
508
+ Ok ( r)
509
+ } else {
510
+ Err ( typed_arg. span ( ) )
511
+ }
511
512
} )
512
513
. and_then ( |world_ref| match world_ref. mutability {
513
514
Some ( _) => Ok ( world_ref) ,
514
515
None => Err ( world_ref. span ( ) ) ,
515
516
} )
516
- . and_then ( |world_mut_ref| match world_mut_ref. elem . as_ref ( ) {
517
- syn:: Type :: Path ( p) => Ok ( p) ,
518
- _ => Err ( world_mut_ref. span ( ) ) ,
517
+ . and_then ( |world_mut_ref| {
518
+ if let syn:: Type :: Path ( p) = world_mut_ref. elem . as_ref ( ) {
519
+ Ok ( p)
520
+ } else {
521
+ Err ( world_mut_ref. span ( ) )
522
+ }
519
523
} )
520
524
. map_err ( |span| {
521
525
syn:: Error :: new (
@@ -530,8 +534,9 @@ fn parse_world_from_args(sig: &syn::Signature) -> syn::Result<&syn::TypePath> {
530
534
/// [`syn::Lit`]: enum@syn::Lit
531
535
/// [`syn::LitStr`]: struct@syn::LitStr
532
536
fn to_string_literal ( l : syn:: Lit ) -> syn:: Result < syn:: LitStr > {
533
- match l {
534
- syn:: Lit :: Str ( str) => Ok ( str) ,
535
- _ => Err ( syn:: Error :: new ( l. span ( ) , "Expected string literal" ) ) ,
537
+ if let syn:: Lit :: Str ( str) = l {
538
+ Ok ( str)
539
+ } else {
540
+ Err ( syn:: Error :: new ( l. span ( ) , "Expected string literal" ) )
536
541
}
537
542
}
0 commit comments