rollup merge of #16839 : treeman/issue-15358
rollup merge of #16840 : huonw/feature-has-added
rollup merge of #16842 : zsiciarz/master
rollup merge of #16846 : treeman/debug-doc
rollup merge of #16849 : nhowell/patch-1
rollup merge of #16852 : steveklabnik/desugar_destructure
Address review comments, add tests
rollup merge of #16881 : cmr/guide-typo
&mut [T] now implements Collection. Fixes #16896
Change rustc to say `array` instead of `vector`
auto merge of #16895 : alexcrichton/rust/rollup, r=alexcrichton

Let's try this again!
auto merge of #16788 : Manishearth/rust/raw-ptr-syntax-ty, r=huonw

@huonw , r? :)

#16781
Add unwrap method to MoveItems
Fix whitespace and missing parentheses.
auto merge of #16894 : alexcrichton/rust/issue-16872, r=huonw

It was previously asserted that each thread received at least one connection,
but this is not guaranteed to always be the case due to scheduling. This test
also deadlocked on failure due to a lingering reference to the sending half of
the channel, so that reference is now also eagerly dropped so the test can fail
properly if something bad happens.

Closes #16872
Rename `RawPtr::to_option()` to `RawPtr::as_ref()`

As outlined in

  https://aturon.github.io/style/naming/conversions.html

`to_` functions names should only be used for expensive operations.
Thus `to_option` is better named `as_option`. Also, putting type
names into method names is considered bad style; what the user is
really trying to get is a reference. This `as_ref` is even better.

Also, we are missing a mutable version of this method. So add a
new trait `RawMutPtr` with a corresponding `as_mut` methode.

Finally, there is a bug in the signature of `to_option` which has
been around since lifetime elision: originally the returned reference
had 'static lifetime, but since the elision changes this become
the lifetime of the raw pointer (which does not make sense, since
the pointer lifetime and referent lifetime are unrelated). Fix
the bug to return a reference with a fresh lifetime (which will
be inferred from the calling context).

[breaking-change]
auto merge of #16809 : nick29581/rust/dst-bug-3, r=alexcrichton

This corrects a rebasing error. Also adds a test so it won't happen again.

r?
Have std::io::TempDir::new and new_in return IoResult

This allows using `try!()`

[breaking-change]

Fixes #16875
Make doc search results use <a> tags instead of js for navigating

This has the primary advantage of not interfering with browser default
behavior for links like being able to cmd/ctrl+click on a result to open
the result in a new tab but leave the current page as-is (previous
behavior both opened a new tab and changed the current tab's location to
the result's)
Second approach - using type contents