Adds language support for Rust to Visual Studio Code. Supports:
code completion
jump to definition, peek definition, find all references, symbol search
types and documentation on hover
code formatting
refactoring (rename, deglob)
error squiggles and apply suggestions from errors
snippets
build tasks
Rust support is powered by a separate language server -
either by the official Rust Language Server (RLS) or
rust-analyzer, depending on the user’s
preference. If you don’t have it installed, the extension will install it for
you (with permission).
This extension is built and maintained by the Rust
IDEs and editors team.
Our focus is on providing
a stable, high quality extension that makes the best use of the respective language
server. We aim to support as many features as possible, but our priority is
supporting the essential features as well as possible.
Install this extension from the VSCode Marketplace
(or by entering ext install rust-lang.rust at the command palette Ctrl+P).
(Skip this step if you already have Rust projects that you’d like to work on.)
Create a new Rust project by following these instructions.
Open a Rust project (File > Add Folder to Workspace...). Open the folder for the whole
project (i.e., the folder containing Cargo.toml, not the src folder).
You’ll be prompted to install the Rust server. Once installed, it should start
analyzing your project (RLS will also have to to build the project).
Configuration
This extension provides options in VSCode’s configuration settings. These
include rust.*, which are passed directly to RLS, and the rust-client.*
, which mostly deal with how to spawn it or debug it.
You can find the settings under File > Preferences > Settings; they all
have IntelliSense help.
Examples:
rust.show_warnings - set to false to silence warnings in the editor.
rust.all_targets - build and index code for all targets (i.e., integration tests, examples, and benches)
rust.cfg_test - build and index test code (i.e., code with #[cfg(test)]/#[test])
rust-client.channel - specifies from which toolchain the RLS should be spawned
TIP: To select the underlying language server, set rust-client.engine accordingly!
Features
Snippets
Snippets are code templates which expand into common boilerplate. IntelliSense
includes snippet names as options when you type; select one by pressing
enter. You can move to the next snippet ‘hole’ in the template by
pressing tab. We provide the following snippets:
for - a for loop
macro_rules - declare a macro
if let - an if let statement for executing code only when a pattern matches
spawn - spawn a thread
extern crate - insert an extern crate statement
This extension is deliberately conservative about snippets and doesn’t include
too many. If you want more, check out
Trusty Rusty Snippets.
Tasks
The plugin provides tasks for building, running, and testing using the relevant
cargo commands. You can build using ctrl+shift+b(Win/Linux), cmd+shift+b(macOS).
Access other tasks via Run Task in the command palette.
The plugin writes these into tasks.json. The plugin will not overwrite
existing tasks, so you can customise these tasks. To refresh back to the
defaults, delete tasks.json and restart VSCode.
Format on save
To enable formatting on save, you need to set the editor.formatOnSave setting
to true. Find it under File > Preferences > Settings.
A Rust toolchain (the extension will configure this for you, with permission),
rls, rust-src, and rust-analysis components (the extension will install
these for you, with permission). Only rust-src is required when using
rust-analyzer.
Implementation
Both language servers can use Cargo to get more information about Rust projects
and both use rustfmt extensively to
format the code.
RLS uses Cargo and also the Rust compiler
(rustc) in a more direct fashion, where
it builds the project and reuses the data computed by the compiler itself. To
provide code completion it uses a separate tool called
racer.
Rust Analyzer is a separate
compiler frontend for the Rust language that doesn’t use the Rust compiler
(rustc) directly but rather performs its
own analysis that’s tailor-fitted to the editor/IDE use case.
Rust support for Visual Studio Code (deprecated)
Adds language support for Rust to Visual Studio Code. Supports:
Rust support is powered by a separate language server - either by the official Rust Language Server (RLS) or rust-analyzer, depending on the user’s preference. If you don’t have it installed, the extension will install it for you (with permission).
This extension is built and maintained by the Rust IDEs and editors team. Our focus is on providing a stable, high quality extension that makes the best use of the respective language server. We aim to support as many features as possible, but our priority is supporting the essential features as well as possible.
For support, please file an issue on the repo or talk to us on Discord. For RLS, there is also some troubleshooting and debugging advice.
Contribution
Contributing code, tests, documentation, and bug reports is appreciated! For more details see contributing.md.
Quick start
ext install rust-lang.rustat the command palette Ctrl+P).File > Add Folder to Workspace...). Open the folder for the whole project (i.e., the folder containingCargo.toml, not thesrcfolder).Configuration
This extension provides options in VSCode’s configuration settings. These include
rust.*, which are passed directly to RLS, and therust-client.*, which mostly deal with how to spawn it or debug it. You can find the settings underFile > Preferences > Settings; they all have IntelliSense help.Examples:
rust.show_warnings- set to false to silence warnings in the editor.rust.all_targets- build and index code for all targets (i.e., integration tests, examples, and benches)rust.cfg_test- build and index test code (i.e., code with#[cfg(test)]/#[test])rust-client.channel- specifies from which toolchain the RLS should be spawnedFeatures
Snippets
Snippets are code templates which expand into common boilerplate. IntelliSense includes snippet names as options when you type; select one by pressing enter. You can move to the next snippet ‘hole’ in the template by pressing tab. We provide the following snippets:
for- a for loopmacro_rules- declare a macroif let- anif letstatement for executing code only when a pattern matchesspawn- spawn a threadextern crate- insert anextern cratestatementThis extension is deliberately conservative about snippets and doesn’t include too many. If you want more, check out Trusty Rusty Snippets.
Tasks
The plugin provides tasks for building, running, and testing using the relevant cargo commands. You can build using ctrl+shift+b(Win/Linux), cmd+shift+b(macOS). Access other tasks via
Run Taskin the command palette.The plugin writes these into
tasks.json. The plugin will not overwrite existing tasks, so you can customise these tasks. To refresh back to the defaults, deletetasks.jsonand restart VSCode.Format on save
To enable formatting on save, you need to set the
editor.formatOnSavesetting totrue. Find it underFile > Preferences > Settings.Requirements
rls,rust-src, andrust-analysiscomponents (the extension will install these for you, with permission). Onlyrust-srcis required when using rust-analyzer.Implementation
Both language servers can use Cargo to get more information about Rust projects and both use
rustfmtextensively to format the code.RLS uses Cargo and also the Rust compiler (
rustc) in a more direct fashion, where it builds the project and reuses the data computed by the compiler itself. To provide code completion it uses a separate tool calledracer.Rust Analyzer is a separate compiler frontend for the Rust language that doesn’t use the Rust compiler (
rustc) directly but rather performs its own analysis that’s tailor-fitted to the editor/IDE use case.