RS.CLIPPY.MANUAL_TRY_FOLD
Checks for usage of `Iterator::fold` with a type that implements `Try`
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: manual_try_fold. Copyright ©2025 The Rust Team. All rights reserved.
What it does
Checks for usage of Iterator::fold with a type that implements Try.
Why is this bad?
The code should use try_fold instead, which short-circuits on failure, thus opening the
door for additional optimizations not possible with fold as rustc can guarantee the
function is never called on None, Err, etc., alleviating otherwise necessary checks. It's
also slightly more idiomatic.
Known issues
This lint doesn't take into account whether a function does something on the failure case,
i.e., whether short-circuiting will affect behavior. Refactoring to try_fold is not
desirable in those cases.
Example
vec![1, 2, 3].iter().fold(Some(0i32), |sum, i| sum?.checked_add(*i));
Use instead:
vec![1, 2, 3].iter().try_fold(0i32, |sum, i| sum.checked_add(*i));
Configuration
-
msrv: The minimum rust version that the project supports. Defaults to therust-versionfield inCargo.toml(default:
current version)