stabilize Peekable::next_if_map (#![feature(peekable_next_if_map)])
#148941
+1
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Stabilization report
Summary
#![feature(peekable_next_if_map)]is a variation ofnext_ifon peekable iterators that can transform the peeked item. This creates a way to take ownership of the next item in an iterator when some condition holds, but put the item back when the condition doesn't hold. This pattern would otherwise have needed unwraps in many cases.Tracking issue
What is stabilized
Example usage adapted from the ACP:
Nightly use
At the moment, this feature is barely used in nightly, though I've found multiple good uses for it in my own projects, hence my pushing for stabilization. It makes the kind of patterns used in recursive descent parsing super concise and maybe with its stabilization it will find more use.
Test coverage
Besides a quite comprehensive doctest, this feature is tested (including panicking in the closure) here:
rust/library/coretests/tests/iter/adapters/peekable.rs
Lines 275 to 359 in c880acd
History
Acknowledgments
ACP, implementation and tracking issue for this feature all by @kennytm <3