Install rust-analyzer on OpenBSD -current

Posted on

The Rust Programming Language is anything but small. One thing that helped me find my way through the language and its libraries is the language server rust-analyzer. The manual lists numerous compatible editor integrations. For example, I’m happy with using Vim with vim-lsp and asyncomplete.vim.

The project provides pre-compiled binaries for Linux, macOS, and Windows. However, installation from source was slightly trickier than expected. So here’s how I installed rust-analyzer from source on OpenBSD -current. The process should work on other platforms alike, especially without rustup.

First, install rustc and cargo from the lang/rust port. You might also want to install rust-clippy and rust-rustfmt while you’re at it.

$ doas pkg_add rust rust-clippy rust-rustfmt

Second, compile and install the rust-analyzer binary from source. See errata below if the the command fails.

$ cargo install \
    --git https://github.com/rust-lang/rust-analyzer.git \
    --branch release \
    --force \
    --bin rust-analyzer \
    --target-dir "$HOME/.cache/rust-analyzer" \
    --locked \
    rust-analyzer

This will install the latest release of rust-analyzer to ~/.cargo/bin/. Remember to add this location to your PATH.

$ export PATH="$HOME/.cargo/bin:$PATH"

Finally, rust-analyzer needs a local copy of Rust’s source code. The following commands fetch the source code matching the version of the currently installed Rust compiler.

$ [ -d "$HOME/.cache/rust-src" ] ||
    git clone https://github.com/rust-lang/rust.git "$HOME/.cache/rust-src"
$ cd "$HOME/.cache/rust-src" &&
    git fetch --tags &&
    git checkout "$( rustc --version | sed 's/^rustc[[:space:]]*//' )"

Lastly, tell rust-analyzer where to find the source code.

$ export RUST_SRC_PATH="$HOME/.cache/rust-src/library"

With this, your favorite editor should be able to talk to rust-analyzer and help you find your way. Of course, you better add the above exports to your ~/.profile. I’ve also added the above commands to my local update script to keep rustc, rust-analyzer, and the sources in sync.

Errata

8 April 2022: Sometimes Cargo fails to install crates from Git repositories due to an incompatible version of libgit2. If so, you can install the latest weekly release of rust-analyzer from crates.io as follows:

$ cargo install \
    --force \
    --bin rust-analyzer \
    --target-dir "$HOME/.cache/rust-analyzer" \
    --locked \
    ra_ap_rust-analyzer

28 April 2022: The Git repository has moved to https://github.com/rust-lang/rust-analyzer. The build is broken on OpenBSD until notify releases commit 41a74f0. In the meantime, you can build rust-analyzer by overriding this dependency locally.