Repository: racer-rust/racer (language: rust)

Issue:
build from master failed
cargo +nightly build --release

```
 Compiling rustc-ap-arena v491.0.0
error[E0599]: no method named `cap` found for type `alloc::raw_vec::RawVec<T>` in the current scope
   --> /Users/chenxiang/.cargo/registry/src/mirrors.ustc.edu.cn-12df342d903acd47/rustc-ap-arena-491.0.0/lib.rs:102:47
    |
102 |                 self.start().add(self.storage.cap())
    |                                               ^^^ private field, not a method

error[E0599]: no method named `cap` found for type `alloc::raw_vec::RawVec<T>` in the current scope
   --> /Users/chenxiang/.cargo/registry/src/mirrors.ustc.edu.cn-12df342d903acd47/rustc-ap-arena-491.0.0/lib.rs:273:55
    |
273 |                     new_capacity = last_chunk.storage.cap();
    |                                                       ^^^ private field, not a method

error[E0599]: no method named `cap` found for type `alloc::raw_vec::RawVec<u8>` in the current scope
   --> /Users/chenxiang/.cargo/registry/src/mirrors.ustc.edu.cn-12df342d903acd47/rustc-ap-arena-491.0.0/lib.rs:408:55
    |
408 |                     new_capacity = last_chunk.storage.cap();
    |                                                       ^^^ private field, not a method

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0599`.
error: Could not compile `rustc-ap-arena`.
warning: build failed, waiting for other jobs to finish...
error: build failed
```
```
 (master)$ rustup --version
rustup 1.17.0 ( )
 (master)$ cargo --version
cargo 1.36.0 (c4fcfb725 2019-05-15)
 (master)$ rustc --version
rustc 1.36.0 (a53f9df32 2019-07-03)
 (master)$ rustup run nightly rustup show
Default host: x86_64-apple-darwin

installed toolchains
--------------------

stable-x86_64-apple-darwin
nightly-x86_64-apple-darwin

active toolchain
----------------

nightly-x86_64-apple-darwin (environment override by RUSTUP_TOOLCHAIN)
rustc 1.38.0-nightly (890881f8f 2019-07-25)
```


Discussion / hints:
same here. I tried to build from #9cf8f29, and faced the error above.

```
$ uname -a
Linux koka 4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
```

```
$ rustup --version                 [master]
rustup 1.18.3 (435397f48 2019-05-22)

$ cargo --version                  [master]
cargo 1.36.0 (c4fcfb725 2019-05-15)

$ rustc --version                  [master]
rustc 1.36.0 (a53f9df32 2019-07-03)

$ rustup run nightly rustup show   [master]
Default host: x86_64-unknown-linux-gnu

installed toolchains
--------------------

stable-x86_64-unknown-linux-gnu
nightly-x86_64-unknown-linux-gnu

active toolchain
----------------

nightly-x86_64-unknown-linux-gnu (environment override by RUSTUP_TOOLCHAIN)
rustc 1.38.0-nightly (890881f8f 2019-07-25)

```
according to this: https://docs.rs/crate/rustc-ap-arena/491.0.0/source/lib.rs , 
`self.storage` is `alloc::raw_vec::RawVec<T>`.
and from https://github.com/rust-lang/rust/blob/4268e7ee22935f086b856ef0063a9e22b49aeddb/src/liballoc/raw_vec.rs#L204
it might be renamed to `capacity()` from `cap()`.
@jiacai2050  @koka831 
Thank you for reporting and sorry for the delay in response.
I'm going to fix it
I've found following workaround:

1. clone repo
2. apply following patch:
```
diff --git a/Cargo.toml b/Cargo.toml
index 7fed526..68f87d9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,7 +24,7 @@ debug = false # because of #1005
 [dependencies]
 bitflags = "1.0"
 log = "0.4"
-rustc-ap-syntax = "491.0.0"
+rustc-ap-syntax = "541.0.0"
 env_logger = "0.6"
 clap = "2.32"
 lazy_static = "1.2"
diff --git a/src/racer/ast.rs b/src/racer/ast.rs
index 000b83a..c7b87c1 100644
--- a/src/racer/ast.rs
+++ b/src/racer/ast.rs
@@ -168,7 +168,7 @@ impl<'ast> visit::Visitor<'ast> for PatBindVisitor {
     fn visit_expr(&mut self, ex: &ast::Expr) {
         // don't visit the RHS or block of an 'if let' or 'for' stmt
         match ex.node {
-            ExprKind::IfLet(ref pat, ..) | ExprKind::WhileLet(ref pat, ..) => {
+            ExprKind::Let(ref pat, ..) => {
                 pat.iter().for_each(|pat| self.visit_pat(pat))
             }
             ExprKind::ForLoop(ref pat, ..) => self.visit_pat(pat),
@@ -717,8 +717,7 @@ impl<'c, 's, 'ast> visit::Visitor<'ast> for ExprTypeVisitor<'c, 's> {
                     }
                 }
             }
-            ExprKind::If(_, ref block, ref else_block)
-            | ExprKind::IfLet(_, _, ref block, ref else_block) => {
+            ExprKind::If(_, ref block, ref else_block) => {
                 debug!("if/iflet expr");
                 if let Some(stmt) = block.stmts.last() {
                     visit::walk_stmt(self, stmt);
@@ -1333,7 +1332,7 @@ pub(crate) struct IfLetVisitor<'r, 's> {
 impl<'ast, 'r, 's> visit::Visitor<'ast> for IfLetVisitor<'r, 's> {
     fn visit_expr(&mut self, ex: &'ast ast::Expr) {
         match &ex.node {
-            ExprKind::IfLet(pats, expr, _, _) | ExprKind::WhileLet(pats, expr, _, _) => {
+            ExprKind::Let(pats, expr) => {
                 if let Some(pat) = pats.get(0) {
                     self.let_pat = Some(Pat::from_ast(&pat.node, &self.scope));
                     let mut expr_visitor = ExprTypeVisitor::new(self.scope.clone(), self.session);
diff --git a/src/racer/lib.rs b/src/racer/lib.rs
index 6291cdb..351d52a 100644
--- a/src/racer/lib.rs
+++ b/src/racer/lib.rs
@@ -8,10 +8,8 @@ extern crate lazy_static;
 #[macro_use]
 extern crate bitflags;
 
-use syntax;
 #[macro_use]
 extern crate derive_more;
-use rls_span;
 
 #[macro_use]
 mod testutils;
```
3. build locally `cargo +nightly build --release`

As I'm new to rust I'm not confident enough to submit it as PR, but hopefully it will help in the meantime.
@mathewcohle 
Thanks, looks `ExprKind::IfLet` has gone...
@kngwyu indeed, see https://github.com/rust-lang/rust/pull/60861

Fix patch:
diff --git a/Cargo.lock b/Cargo.lock
index 74f3a8b4..24a9f6d8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -10,7 +10,7 @@ dependencies = [
 
 [[package]]
 name = "annotate-snippets"
-version = "0.5.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -112,6 +112,15 @@ dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "crossbeam-utils"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "derive_more"
 version = "0.13.0"
@@ -313,7 +322,7 @@ dependencies = [
  "racer-cargo-metadata 0.1.1",
  "racer-testutils 0.1.0",
  "rls-span 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-syntax 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-syntax 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -495,43 +504,33 @@ dependencies = [
 
 [[package]]
 name = "rustc-ap-arena"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "rustc-ap-rustc_data_structures 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_data_structures 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rustc-ap-graphviz"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
-[[package]]
-name = "rustc-ap-rustc_cratesio_shim"
-version = "491.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
 [[package]]
 name = "rustc-ap-rustc_data_structures"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "ena 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "jobserver 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-graphviz 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_cratesio_shim 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-serialize 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-graphviz 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-serialize 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-rayon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-rayon-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -541,23 +540,27 @@ dependencies = [
 
 [[package]]
 name = "rustc-ap-rustc_errors"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "annotate-snippets 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "annotate-snippets 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_cratesio_shim 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_data_structures 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-serialize 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-syntax_pos 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_data_structures 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-serialize 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-syntax_pos 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "rustc-ap-rustc_lexer"
+version = "542.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "rustc-ap-rustc_macros"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -569,20 +572,19 @@ dependencies = [
 
 [[package]]
 name = "rustc-ap-rustc_target"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_cratesio_shim 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_data_structures 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-serialize 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-syntax_pos 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_data_structures 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-serialize 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-syntax_pos 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rustc-ap-serialize"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -591,32 +593,33 @@ dependencies = [
 
 [[package]]
 name = "rustc-ap-syntax"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_data_structures 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_errors 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_macros 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_target 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-serialize 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-syntax_pos 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_data_structures 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_errors 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_lexer 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_macros 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_target 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-serialize 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-syntax_pos 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rustc-ap-syntax_pos"
-version = "491.0.0"
+version = "542.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-arena 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_data_structures 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-rustc_macros 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-ap-serialize 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-arena 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_data_structures 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-rustc_macros 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-ap-serialize 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -876,7 +879,7 @@ dependencies = [
 
 [metadata]
 "checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e"
-"checksum annotate-snippets 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e8bcdcd5b291ce85a78f2b9d082a8de9676c12b1840d386d67bc5eea6f9d2b4e"
+"checksum annotate-snippets 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7021ce4924a3f25f802b2cccd1af585e39ea1a363a1aa2e72afe54b67a3a7a7"
 "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
 "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71"
 "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
@@ -889,6 +892,7 @@ dependencies = [
 "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3"
 "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150"
 "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
+"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
 "checksum derive_more 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f57d78cf3bd45270dad4e70c21ec77a960b36c7a841ff9db76aaa775a8fb871"
 "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
 "checksum ena 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3dc01d68e08ca384955a3aeba9217102ca1aa85b6e168639bf27739f1d749d87"
@@ -931,16 +935,16 @@ dependencies = [
 "checksum regex-syntax 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8c2f35eedad5295fdf00a63d7d4b238135723f92b434ec06774dad15c7ab0861"
 "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5"
 "checksum rls-span 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1cb4694410d8d2ce43ccff3682f1c782158a018d5a9a92185675677f7533eb3"
-"checksum rustc-ap-arena 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc0ad4318f3425229ed7b117275368b83269bec75f9609d4965dcb9752483c86"
-"checksum rustc-ap-graphviz 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b80b7ea7902919f397c4bb12d102abe896fced7893d09d84bcac233e555bb388"
-"checksum rustc-ap-rustc_cratesio_shim 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "752463d2b80039d23e42e667a9f6fe08213bd865f6ea301fb35f8068d94955ac"
-"checksum rustc-ap-rustc_data_structures 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5c3d6a14181e11c132d0ef97a6c27e1bb1d4da09682d02222393875c10d1c364"
-"checksum rustc-ap-rustc_errors 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "55caea8426565de362e8df0df737e43b9f22d632e0e52710cbfe316acc6ce2f0"
-"checksum rustc-ap-rustc_macros 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "071420d762d2c779d1d4972356f37f5d049dcdd6c49e78f1b037e04c5a0f1a19"
-"checksum rustc-ap-rustc_target 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5464696d0748e3019b9e5daca5fcadc53889dc2bca1dc26bf42001fd1c4194f"
-"checksum rustc-ap-serialize 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9464445c11c15cf32ef27815b3ec89315b0ed73c6c771cbcf8543be59a3c1502"
-"checksum rustc-ap-syntax 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff53245ae370d8e8073dc9cc13f8921e6110d0ccd208b64c388c5653fa6b9c83"
-"checksum rustc-ap-syntax_pos 491.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41896f0eb2eb2f4ddba406939aa6b07386160fa38bee8cde3f7f0d85663e3d47"
+"checksum rustc-ap-arena 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60ae3caf12a5dfa3181e12e813b090b0b41d43b91b193759ba9084520aeb2459"
+"checksum rustc-ap-graphviz 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0113b8888a3f0a68825ed0dea6d3a1aa71b5d0cd6ff16854252c4faea253cf9b"
+"checksum rustc-ap-rustc_data_structures 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd9eec8c9fbdac20e631f995861c5c854b3f8b2347955614854571457117e51"
+"checksum rustc-ap-rustc_errors 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f55baa0fa4a42a8b354f02015755e7db5619125ad3e625923865f6f1f5688753"
+"checksum rustc-ap-rustc_lexer 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2875181a7886d83b727b1d08291ee430728c2d94c9a7e3f4359df2a14e6c462b"
+"checksum rustc-ap-rustc_macros 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d3cadcc9dd4fc3c94c89e103e91f8792f19a1466e0a127d9fb29a2c0ee069389"
+"checksum rustc-ap-rustc_target 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4bdcce1900404a6907785dd31a152ddd723766dfbe29bed6bcca255e7347abdd"
+"checksum rustc-ap-serialize 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "550e295fa077784f7145ba77591aff952fad2279f3ce23a53cf8750fb366c622"
+"checksum rustc-ap-syntax 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "594006d7e68bcff9b5356517667c4e9dd5ec925a2a08660d129b705d0b741ad7"
+"checksum rustc-ap-syntax_pos 542.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ae6751bf44d949b430b151c81772b585686f0ff31e328b68eaa7d406590f848"
 "checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8"
 "checksum rustc-rayon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d2e07e19601f21c59aad953c2632172ba70cb27e685771514ea66e4062b3363"
 "checksum rustc-rayon-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "79d38ca7cbc22fa59f09d8534ea4b27f67b0facf0cbe274433aceea227a02543"
diff --git a/Cargo.toml b/Cargo.toml
index ff7c2d0b..b90da148 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -23,7 +23,7 @@ debug = false # because of #1005
 [dependencies]
 bitflags = "1.0"
 log = "0.4"
-rustc-ap-syntax = "491.0.0"
+rustc-ap-syntax = "542.0.0"
 env_logger = "0.6"
 clap = "2.32"
 lazy_static = "1.2"
diff --git a/src/racer/ast.rs b/src/racer/ast.rs
index 5ef0f333..069dc8f9 100644
--- a/src/racer/ast.rs
+++ b/src/racer/ast.rs
@@ -165,11 +165,13 @@ impl<'ast> visit::Visitor<'ast> for PatBindVisitor {
 
     fn visit_expr(&mut self, ex: &ast::Expr) {
         // don't visit the RHS or block of an 'if let' or 'for' stmt
-        match ex.node {
-            ExprKind::IfLet(ref pat, ..) | ExprKind::WhileLet(ref pat, ..) => {
-                pat.iter().for_each(|pat| self.visit_pat(pat))
+        match &ex.node {
+            ExprKind::If(let_stmt, ..) | ExprKind::While(let_stmt, ..) => {
+                if let ExprKind::Let(pats, ..) = &let_stmt.node {
+                    pats.iter().for_each(|pat| self.visit_pat(pat))
+                }
             }
-            ExprKind::ForLoop(ref pat, ..) => self.visit_pat(pat),
+            ExprKind::ForLoop(pat, ..) => self.visit_pat(pat),
             _ => visit::walk_expr(self, ex),
         }
     }
@@ -268,62 +270,28 @@ fn destructure_pattern_to_ty(
                 );
             }
         }
-        PatKind::Tuple(ref tuple_elements, _) => match *ty {
+        PatKind::Tuple(ref tuple_elements) => match *ty {
             Ty::Tuple(ref typeelems) => {
-                let mut res = None;
                 for (i, p) in tuple_elements.iter().enumerate() {
                     if !point_is_in_span(point, &p.span) {
                         continue;
                     }
                     if let Some(ref ty) = typeelems[i] {
-                        res = destructure_pattern_to_ty(p, point, ty, scope, session);
-                        break;
+                        return destructure_pattern_to_ty(p, point, ty, scope, session);
                     }
                 }
-                res
+                None
             }
             _ => panic!("Expecting TyTuple"),
         },
-        PatKind::TupleStruct(ref path, ref children, _) => {
-            let m = resolve_ast_path(path, &scope.filepath, scope.point, session);
+        PatKind::TupleStruct(ref path, ref children) => {
+            let m = resolve_ast_path(path, &scope.filepath, scope.point, session)?;
             let contextty = path_to_match(ty.clone(), session);
-            if let Some(m) = m {
-                let mut res = None;
-
-                for (i, p) in children.iter().enumerate() {
-                    if point_is_in_span(point, &p.span) {
-                        res = typeinf::get_tuplestruct_field_type(i, &m, session)
-                            .and_then(|ty|
-                                // if context ty is a match, use its generics
-                                if let Some(Ty::Match(ref contextm)) = contextty {
-                                    path_to_match_including_generics(ty, contextm.to_generics(), session)
-                                } else {
-                                    path_to_match(ty, session)
-                                })
-                            .and_then(|ty| destructure_pattern_to_ty(p, point, &ty, scope, session));
-
-                        break;
-                    }
-                }
-                res
-            } else {
-                None
-            }
-        }
-        PatKind::Struct(ref path, ref children, _) => {
-            let m = resolve_ast_path(path, &scope.filepath, scope.point, session);
-            let contextty = path_to_match(ty.clone(), session);
-            if let Some(m) = m {
-                let mut res = None;
-
-                for child in children {
-                    if point_is_in_span(point, &child.span) {
-                        res = typeinf::get_struct_field_type(
-                            &child.node.ident.name.as_str(),
-                            &m,
-                            session,
-                        )
+            for (i, p) in children.iter().enumerate() {
+                if point_is_in_span(point, &p.span) {
+                    return typeinf::get_tuplestruct_field_type(i, &m, session)
                         .and_then(|ty| {
+                            // if context ty is a match, use its generics
                             if let Some(Ty::Match(ref contextm)) = contextty {
                                 path_to_match_including_generics(
                                     ty,
@@ -334,18 +302,34 @@ fn destructure_pattern_to_ty(
                                 path_to_match(ty, session)
                             }
                         })
-                        .and_then(|ty| {
-                            destructure_pattern_to_ty(&child.node.pat, point, &ty, scope, session)
-                        });
-
-                        break;
-                    }
+                        .and_then(|ty| destructure_pattern_to_ty(p, point, &ty, scope, session));
                 }
-
-                res
-            } else {
-                None
             }
+            None
+        }
+        PatKind::Struct(ref path, ref children, _) => {
+            let m = resolve_ast_path(path, &scope.filepath, scope.point, session)?;
+            let contextty = path_to_match(ty.clone(), session);
+            for child in children {
+                if point_is_in_span(point, &child.span) {
+                    return typeinf::get_struct_field_type(
+                        &child.node.ident.name.as_str(),
+                        &m,
+                        session,
+                    )
+                    .and_then(|ty| {
+                        if let Some(Ty::Match(ref contextm)) = contextty {
+                            path_to_match_including_generics(ty, contextm.to_generics(), session)
+                        } else {
+                            path_to_match(ty, session)
+                        }
+                    })
+                    .and_then(|ty| {
+                        destructure_pattern_to_ty(&child.node.pat, point, &ty, scope, session)
+                    });
+                }
+            }
+            None
         }
         _ => {
             debug!("Could not destructure pattern {:?}", pat);
@@ -715,8 +699,7 @@ impl<'c, 's, 'ast> visit::Visitor<'ast> for ExprTypeVisitor<'c, 's> {
                     }
                 }
             }
-            ExprKind::If(_, ref block, ref else_block)
-            | ExprKind::IfLet(_, _, ref block, ref else_block) => {
+            ExprKind::If(_, ref block, ref else_block) => {
                 debug!("if/iflet expr");
                 if let Some(stmt) = block.stmts.last() {
                     visit::walk_stmt(self, stmt);
@@ -1326,12 +1309,15 @@ pub(crate) struct IfLetVisitor<'r, 's: 'r> {
 impl<'ast, 'r, 's> visit::Visitor<'ast> for IfLetVisitor<'r, 's> {
     fn visit_expr(&mut self, ex: &'ast ast::Expr) {
         match &ex.node {
-            ExprKind::IfLet(pats, expr, _, _) | ExprKind::WhileLet(pats, expr, _, _) => {
-                if let Some(pat) = pats.get(0) {
-                    self.let_pat = Some(Pat::from_ast(&pat.node, &self.scope));
-                    let mut expr_visitor = ExprTypeVisitor::new(self.scope.clone(), self.session);
-                    expr_visitor.visit_expr(expr);
-                    self.rh_expr = expr_visitor.result;
+            ExprKind::If(let_stmt, ..) | ExprKind::While(let_stmt, ..) => {
+                if let ExprKind::Let(pats, expr) = &let_stmt.node {
+                    if let Some(pat) = pats.get(0) {
+                        self.let_pat = Some(Pat::from_ast(&pat.node, &self.scope));
+                        let mut expr_visitor =
+                            ExprTypeVisitor::new(self.scope.clone(), self.session);
+                        expr_visitor.visit_expr(expr);
+                        self.rh_expr = expr_visitor.result;
+                    }
                 }
             }
             _ => {}
diff --git a/src/racer/ast_types.rs b/src/racer/ast_types.rs
index 8db67020..b01fbabf 100644
--- a/src/racer/ast_types.rs
+++ b/src/racer/ast_types.rs
@@ -268,6 +268,7 @@ pub enum Pat {
     Range,
     Slice,
     Mac,
+    Rest,
 }
 
 impl Pat {
@@ -305,7 +306,7 @@ impl Pat {
                     .collect();
                 Pat::Struct(path, fields)
             }
-            PatKind::TupleStruct(path, pats, _) => {
+            PatKind::TupleStruct(path, pats) => {
                 let path = Path::from_ast(path, scope);
                 let pats = pats
                     .iter()
@@ -314,7 +315,7 @@ impl Pat {
                 Pat::TupleStruct(path, pats)
             }
             PatKind::Path(_, path) => Pat::Path(Path::from_ast(&path, scope)),
-            PatKind::Tuple(pats, _) => {
+            PatKind::Tuple(pats) => {
                 let pats = pats
                     .iter()
                     .map(|pat| Pat::from_ast(&pat.node, scope))
@@ -329,6 +330,7 @@ impl Pat {
             // ignore paren
             PatKind::Paren(pat) => Pat::from_ast(&pat.node, scope),
             PatKind::Mac(_) => Pat::Mac,
+            PatKind::Rest => Pat::Rest,
         }
     }
 }
diff --git a/src/racer/core.rs b/src/racer/core.rs
index 94544a92..a6fac0b5 100644
--- a/src/racer/core.rs
+++ b/src/racer/core.rs
@@ -1246,27 +1246,24 @@ where
 /// let session = racer::Session::new(&cache, None);
 ///
 /// // This is the file where we request completion from
-/// let src = stringify! {
+/// let src = r"
 ///    mod sub;
 ///    use sub::foo;
 ///    fn main() {
 ///        foo();
 ///    };
-/// };
+/// ";
 ///
 /// // This is the submodule where the definition is found
-/// let sub = stringify! {
-///     pub fn foo() {}
-/// };
+/// let sub = r"pub fn foo() {}";
 ///
 /// // Load files into cache to prevent trying to read from disk
 /// session.cache_file_contents("sub.rs", sub);
 /// session.cache_file_contents("lib.rs", src);
 ///
-/// // Search for the definition. 45 is the byte offset
-/// // in `src` after stringify! runs. Specifically, this asks
-/// // for the definition of `foo()`.
-/// let m = racer::find_definition("lib.rs", racer::Location::from(45), &session)
+/// // Search for the definition. 52 is the byte offset in `src`.
+/// // Specifically, this asks for the definition of `foo()`.
+/// let m = racer::find_definition("lib.rs", racer::Location::from(52), &session)
 ///               .expect("find definition returns a match");
 ///
 /// // Should have found definition in the "sub.rs" file


Test patch:
diff --git a/tests/system.rs b/tests/system.rs
index 65b6dca4..4444bccc 100644
--- a/tests/system.rs
+++ b/tests/system.rs
@@ -3580,6 +3580,8 @@ fn doesnt_complete_macro_after_use() {
 }
 
 #[test]
+#[ignore]
+// FIXME:  #1059
 fn complets_stringify() {
     let src = r#"
     fn main() {
@@ -3614,6 +3616,8 @@ fn completes_vec() {
 }
 
 #[test]
+#[ignore]
+// FIXME: #1059
 fn finds_std_macro_doc() {
     let src = r#"
     fn main() {