Define a new setting g:rust_fold

g:rust_fold allows folding to be enabled. This lets the user turn on
folding without having to define autocommands.
Set softtabstop, textwidth, and optionally colorcolumn

Setting softtabstop makes <Del> delete 4 spaces as if it were a tab.

Setting textwidth allows comments to be wrapped automatically. It's set
at 80, which is the recommended line length for Rust programs. There are
suggestions that it should be 79, but our current style guide says 80 so
that's what we're matching.

A new setting g:rust_colorcolumn sets colorcolumn as well, to +1,101.
This indicates both the textwidth and the second stricter line length of
100 that our style guide lists.
Remove rust_colorcolumn, set textwidth to 99

The latest change to aturon/rust-guidelines states that lines must not
exceed 99 characters. This gets rid of the 80/100 split, so we don't
need to customize colorcolumn amymore.
Borrow checking for overloaded indexing

Closes #15525
Fix cargo install instructions

Cargo now comes with Rust
test: Try to fix a failing snapshot test

This test seems to yield a different error message on cross compiles, so just
ignore it when cross compiling.
use trait rather than fns

please note the snapshot-waiting unpleasantness. I'm
unable to use the traditional #[cfg(stage0)] mechanism
to swap the new style in for later compiler stages,
because macros invocations in method positions cause
the parser to choke before cfg can strip it out.

Parenthetical note: this problem wouldn't arise with
an interleaved parsing/expansion....
change to new trait style for method field refs

Per @pnkfelix 's suggestion, using a trait to make these
field accesses more readable (and vastly more similar
to the original code.

oops fix new ast_map fix
libsyntax::ast: Derive Show impls
middle: Derive Show impls

And change some uses of the `{:?}` format string to `{}`.
typeck::check::_match: Better error handling

Previously this was an Option::unwrap() which failed for me.
Unfortunately I've since inadvertently worked around the bug and have
been unable to reproduce it. With this patch hopefully the next person
to encounter this will be in a slightly better position to debug it.
middle::subst: Better handling of parameter lookup failure
middle::kind: Don't crash when checking safety of Drop

To verify that a type can satisfy Send
`check_struct_safe_for_destructor` attempts to construct a new `ty::t`
an empty substitution list.

Previously the function would verify that the function has no type
parameters before attempting this. Unfortunately this check would not
catch functions with only regions parameters. In this case, the type
would eventually find its way to the substition engine which would
attempt to perform a substitution on the region parameters. As the
constructed substitution list is empty, this would fail, leading to a
compiler crash.

We fix this by verifying that types have both no type and region
parameters.
middle::typeck::collect: Add debug output for lifetimes
Add test for crash in unsafe destructor check
auto merge of #15695 : alexcrichton/rust/fix-snapshots, r=brson

This test seems to yield a different error message on cross compiles, so just
ignore it when cross compiling.
auto merge of #15585 : bgamari/rust/subst-bug, r=pnkfelix

This branch has a fix for #15557 (a2bcef9) as well as a variety of patches I found useful while debugging this issue. These include adding `Show` impls to a variety of types, including the majority of `syntax::ast` and some of `middle::ty`.
auto merge of #15656 : nick29581/rust/index-bck, r=pnkfelix

Closes #15525

The important bit of this are the changes from line 445 in mem_categorization.rs. Most of the other changes are about adding an Implicit PointerKind, and this is only necessary for getting a decent error message :-s An alternative would have been to add an implciti/explicit flag to cat_deref, which could be mostly ignored and so would mean much fewer changes. However, the implicit state would only be valid if the PointerKind was BorrowedPtr, so it felt like it ought to be another kind of PointerKind. I still don't know which is the better design.
debuginfo: Add python formatters that allow LLDB to print values with Rust syntax
debuginfo: Inject 'Rust-mode' LLDB prelude into debuginfo test scripts.