Rust support for coc.nvim
It's fork of rls-vscode.
Adds language support for Rust to coc.nvim. 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
Rust support is powered by the Rust Language Server (RLS). If you don't have it installed, the extension will install it for you.
For support, please file an issue on the repo or talk to us on Gitter or in #rust-dev-tools on IRC (Mozilla servers). There is also some troubleshooting and debugging advice.
Quick start
-
Install rustup (Rust toolchain manager).
-
Install this extension in your vim by:
:CocInstall coc-rls
-
(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. 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 RLS. Once installed, the RLS should start building your project.
Nixos
Nixos users should use nix-shell or direnv for development. Follow these instructions to set them up first.
Then create two files:
- An .envrc file containing
use_nix
. - And shell.nix containing:
let
moz_overlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz);
nixpkgs = import <nixpkgs> { overlays = [ moz_overlay ]; };
#rustNightlyChannel = (nixpkgs.rustChannelOf { date = "2019-01-26"; channel = "nightly"; }).rust;
rustStableChannel = nixpkgs.latest.rustChannels.stable.rust.override {
extensions = [
"rust-src"
"rls-preview"
"clippy-preview"
"rustfmt-preview"
];
};
in
with nixpkgs;
stdenv.mkDerivation {
name = "moz_overlay_shell";
buildInputs = [
rustStableChannel
rls
rustup
];
}
Enter the shell in current directory and enjoy developing rust apps + coc.nvim + coc-rls :)
Tip: If you want to use nightly channel uncomment that line and use it :)
Configuration
This extension provides some options into coc-settings.json
. These
options have names which start with rust.
. Install coc-json
for auto completion support.
rust-client.logToFile
- When set to true, RLS stderr is logged to a file at workspace root level.rust-client.rustupPath
- Path to rustup executable, defaultrustup
.rust-client.rlsPath
- Path to rls executable (only required for rls developers), default:null
.rust-client.revealOutputChannelOn
- Specifies message severity on which the output channel will be revealed.rust-client.updateOnStartup
- Update the RLS whenever the extension starts up, default:false
.rust-client.disableRustup
- Disable usage of rustup and use rustc/rls from PATH.rust-client.channel
- Rust channel to install RLS from. By default it will use the same channel as your currently open projectrls-preview
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.build_lib
- if you have both a binary and library in your crate, set to true to build only the library.rust.build_bin
- if you have multiple binaries, you can specify which to build using this option.rust.cfg_test
- build and index test code (i.e., code with#[cfg(test)]
/#[test]
)
Features
Snippets
Snippets are code templates which expand into common boilerplate. Intellisense includes snippet names as options when you type; select one by confirm the completion. You can move to the next 'hole' in the template by pressing '' (by default). We provide the following snippets:
for
- a for loopunimplemented
unreachable
println
assert
andassert_eq
macro_rules
- declare a macroif let Option
- anif let
statement for executing code only in theSome
case.spawn
- spawn a threadextern crate
- insert anextern crate
statement
This extension is deliberately conservative about snippets and doesn't include too many. If you want more, check out Trusty Rusty Snippets.
Format on save
To enable formatting on save, open coc-settings.json
by :CocConfig
, then add
"rust"
to coc.preferences.formatOnSaveFiletypes
field.
Requirements
- Rustup,
- A Rust toolchain (the extension will configure this for you, with permission),
- RLS (currently
rls-preview
),rust-src
, andrust-analysis
components (the extension will install these for you, with permission).
Implementation
This extension almost exclusively uses the RLS for its feature support (snippets are provided client-side). The RLS uses the Rust compiler (rustc) to get data about Rust programs. It uses Cargo to manage building. Both Cargo and rustc are run in-process by the RLS. Formatting and code completion are provided by rustfmt and Racer, again both of these are run in-process by the RLS.
LICENSE
MIT