]> git.lizzy.rs Git - rust.git/commit
auto merge of #15561 : huonw/rust/must-use-iterators, r=alexcrichton
authorbors <bors@rust-lang.org>
Thu, 10 Jul 2014 05:16:28 +0000 (05:16 +0000)
committerbors <bors@rust-lang.org>
Thu, 10 Jul 2014 05:16:28 +0000 (05:16 +0000)
commit6372915a78a12adfbc327aba87225988ae03e7f9
treecf15cd9d1465fed21dca567a382a3320a8b5affc
parent898701cb35833b2ecea8bc7f3902a35b7eccc219
parent27d18fbe41665eef798eb29660c1883bb8600502
auto merge of #15561 : huonw/rust/must-use-iterators, r=alexcrichton

Similar to the stability attributes, a type annotated with `#[must_use =
"informative snippet"]` will print the normal warning message along with
"informative snippet". This allows the type author to provide some
guidance about why the type should be used.

---

It can be a little unintuitive that something like `v.iter().map(|x|
println!("{}", x));` does nothing: the majority of the iterator adaptors
are lazy and do not execute anything until something calls `next`, e.g.
a `for` loop, `collect`, `fold`, etc.

The majority of such errors can be seen by someone writing something
like the above, i.e. just calling an iterator adaptor and doing nothing
with it (and doing this is certainly useless), so we can co-opt the
`must_use` lint, using the message functionality to give a hint to the
reason why.

Fixes #14666.
src/libcore/iter.rs