@@ -2374,7 +2374,7 @@ fn check_needless_collect_direct_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCont
23742374 match_type( cx, ty, & paths:: BTREEMAP ) ||
23752375 is_type_diagnostic_item( cx, ty, sym!( hashmap_type) ) {
23762376 if method. ident. name == sym!( len) {
2377- let span = shorten_span ( expr, sym! ( collect ) ) ;
2377+ let span = shorten_needless_collect_span ( expr) ;
23782378 span_lint_and_sugg(
23792379 cx,
23802380 NEEDLESS_COLLECT ,
@@ -2386,20 +2386,20 @@ fn check_needless_collect_direct_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCont
23862386 ) ;
23872387 }
23882388 if method. ident. name == sym!( is_empty) {
2389- let span = shorten_span ( expr, sym! ( iter ) ) ;
2389+ let span = shorten_needless_collect_span ( expr) ;
23902390 span_lint_and_sugg(
23912391 cx,
23922392 NEEDLESS_COLLECT ,
23932393 span,
23942394 NEEDLESS_COLLECT_MSG ,
23952395 "replace with" ,
2396- "get(0 ).is_none()" . to_string( ) ,
2396+ "next( ).is_none()" . to_string( ) ,
23972397 Applicability :: MachineApplicable ,
23982398 ) ;
23992399 }
24002400 if method. ident. name == sym!( contains) {
24012401 let contains_arg = snippet( cx, args[ 1 ] . span, "??" ) ;
2402- let span = shorten_span ( expr, sym! ( collect ) ) ;
2402+ let span = shorten_needless_collect_span ( expr) ;
24032403 span_lint_and_then(
24042404 cx,
24052405 NEEDLESS_COLLECT ,
@@ -2579,13 +2579,13 @@ fn detect_iter_and_into_iters<'tcx>(block: &'tcx Block<'tcx>, identifier: Ident)
25792579 }
25802580}
25812581
2582- fn shorten_span ( expr : & Expr < ' _ > , target_fn_name : Symbol ) -> Span {
2583- let mut current_expr = expr;
2584- while let ExprKind :: MethodCall ( ref path, ref span, ref args, _) = current_expr. kind {
2585- if path. ident . name == target_fn_name {
2582+ fn shorten_needless_collect_span ( expr : & Expr < ' _ > ) -> Span {
2583+ if_chain ! {
2584+ if let ExprKind :: MethodCall ( .., args, _) = & expr. kind;
2585+ if let ExprKind :: MethodCall ( _, span, ..) = & args[ 0 ] . kind;
2586+ then {
25862587 return expr. span. with_lo( span. lo( ) ) ;
25872588 }
2588- current_expr = & args[ 0 ] ;
25892589 }
2590- unreachable ! ( )
2590+ unreachable ! ( ) ;
25912591}
0 commit comments