rust-analyzer changelog #0


This is the first instance of a monthly changelog for rust-analyzer. This changelog also serves as a transparency measure for our OpenCollective. We want to thank all sponsors, especially Embark Studios, as well as all individual contributors. You will also find a detailed bookkeeping record around your donation here within the next week.

Notable changes since last month include:

New Features

  • Initial support for .await syntax (#1558).
  • Type inference for ? (#1512).
  • Completion for type aliases (#1472).
  • Mutable variables are underlined (#1544, #1550).
  • add_impl_members adds types (#1476).
  • Sumbodules with raw names and #[path] are resolved (#1478, #1499).
  • Correctly add obligations in function methods (#1496).
  • Initial type inference for for loops (#1501).
  • Use bounds on generic parameters during type inference (#1515).
  • Completions works for fields of enum variants and in patterns (#1525, #1572).
  • Show types of local variables in completion (#1582).


  • Make goto definition work with various Vim clients (#1511).
  • Diagnostics are collected for a single file (#1494).
  • Show code lens for fn main (#1536).
  • Fix discovery of lang items (#1514).

Internal Improvements

  • Share the lexer with rustc (#1575).
  • Migrate to the new version of rowan library, improving memory usage of syntax trees for 60% (#1545).
  • Pick up floundering work from chalk (#1532).
  • Many improvements and cleanups by (@kjeremy).

The highlight of the month is probably #1575. The end-game for rust-analyzer is to become a different front-end for the code that rustc itself uses. This pull request is the first step on this path: now, rust-analyzer and rustc use the same code for lexing Rust.