@@ -67,16 +67,11 @@ impl Step {
6767 match arg_marked_as_step.len() {
6868 0 => Ok(None),
6969 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])?;
7471 Ok(Some(ident.clone()))
7572 }
7673 _ => 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(),
8075 "Only 1 step argument is allowed",
8176 )),
8277 }
@@ -255,21 +250,23 @@ impl Step {
255250 ::std::borrow::Borrow::borrow(&__cucumber_ctx.step);
256251 }
257252 } 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"));
266257 };
267258
268259 let not_found_err = format!("{} not found", ident);
269260 let parsing_err = format!(
270261 "{} can not be parsed to {}",
271262 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,
273270 );
274271
275272 quote! {
@@ -349,15 +346,13 @@ impl Parse for AttributeArgument {
349346 },
350347 )?);
351348
352- Ok(AttributeArgument ::Regex(str_lit))
349+ Ok(Self ::Regex(str_lit))
353350 } else {
354351 Err(syn::Error::new(arg.span(), "Expected regex argument"))
355352 }
356353 }
357354
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)?)),
361356
362357 syn::NestedMeta::Meta(_) => Err(syn::Error::new(
363358 arg.span(),
@@ -391,13 +386,11 @@ fn remove_all_attrs_if_needed<'a>(
391386 .iter_mut()
392387 .filter_map(|arg| {
393388 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)
399392 }
400- None
393+ .map(move |attr| (&*arg, attr))
401394 })
402395 .unzip()
403396}
@@ -439,8 +432,7 @@ fn remove_attr(attr_arg: &str, arg: &mut syn::FnArg) -> Option<syn::Attribute> {
439432
440433 if removed.len() == 1 {
441434 typed_arg.attrs = other;
442- // Unwrapping is OK here, because `step_idents.len() == 1`.
443- return Some(removed.pop().unwrap());
435+ return removed.pop();
444436 }
445437 other.append(&mut removed);
446438 typed_arg.attrs = other;
@@ -462,9 +454,10 @@ fn parse_fn_arg(arg: &syn::FnArg) -> syn::Result<(&syn::Ident, &syn::Type)> {
462454 }
463455 };
464456
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"));
468461 };
469462
470463 Ok((ident, arg.ty.as_ref()))
@@ -478,18 +471,23 @@ fn find_first_slice(sig: &syn::Signature) -> Option<&syn::TypePath> {
478471 syn::FnArg::Receiver(_) => None,
479472 }
480473 .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
484478 }
485479 .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
489484 }
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+ }
493491 })
494492 })
495493 })
@@ -505,17 +503,23 @@ fn parse_world_from_args(sig: &syn::Signature) -> syn::Result<&syn::TypePath> {
505503 syn::FnArg::Typed(a) => Ok(a),
506504 syn::FnArg::Receiver(_) => Err(first_arg.span()),
507505 })
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+ }
511512 })
512513 .and_then(|world_ref| match world_ref.mutability {
513514 Some(_) => Ok(world_ref),
514515 None => Err(world_ref.span()),
515516 })
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+ }
519523 })
520524 .map_err(|span| {
521525 syn::Error::new(
@@ -530,8 +534,9 @@ fn parse_world_from_args(sig: &syn::Signature) -> syn::Result<&syn::TypePath> {
530534/// [`syn::Lit`]: enum@syn::Lit
531535/// [`syn::LitStr`]: struct@syn::LitStr
532536fn 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"))
536541 }
537542}
0 commit comments