RLS 1.0 release candidate

The current version of the Rust Language Server (RLS), 0.130.5, is the first 1.0 release candidate. It is available on nightly and beta channels, and from the 3rd September will be available with stable Rust.

1.0 for the RLS is a somewhat arbitrary milestone. We think the RLS can handle most small and medium size projects (notable, it doesn't work with Rust itself, but that is large and has a very complex build system), and we think it is release quality. However there are certainly limitations and many planned improvements.

It would be really useful if you could help us test the release candidate! Please report any crashes, or projects where the RLS gives no information or any bugs where it gives incorrect information.

The easiest way to install the RLS is to install an extension for your favourite editor, for example:

For most editors you will only need to have Rustup installed and the editor will install the rest.

What to expect

Syntax highlighting

Each editor does its own syntax highlighting

Code completion

Code completion is syntactic, performed by Racer. Because it is syntactic there are many instances where it is incomplete or incorrect. However, we believe it is useful.

Errors and warnings

Errors and other diagnostics are displayed inline. Exactly how the errors are presented depends on the editor.

Formatting

By Rustfmt (which is also at the 1.0 release candidate stage).

Clippy

Clippy is installed as part of the RLS. You can turn it on with a setting in your editor or with the usual crate attribute.

Code intelligence

The RLS can do the following:

  • type and docs on hover (and sometimes signature info)
  • goto definition
  • find all references
  • find all implementations for traits and concrete types
  • find all symbols in the file/project
  • renaming (this will not work where a renaming would cause an error, such as where the field initialisation syntax is used)
  • change glob imports to list imports

These features will work for most identifiers, but won't work where identifiers are defined in a macro (and sometimes when used in a macro use). They also won't work for identifiers in module paths, except for the last part, e.g., in foo::bar::baz, the RLS has information about baz, but not foo or bar.