Rust
VisualStudioCode

Rust Language Server(RLS)でVisual Studio Codeの補完を行う

More than 1 year has passed since last update.


背景

Visual Studio Code(vscode)でRustコードを書く際、選択肢としてあるのが vscode-rust だったが、最近はあんまり実装に時間取れないからrls-vscode使ってね(意訳)という事なので、そちらを使うことにする。


注意

RLSは2017/12月現在まだα開発段階なので、仕様が変わる場合や、致命的なエラーが出る場合もあるので注意。

何かあったら、rustup update nightlyで取得できる最新版で直るのを待つか、ソースから何とかするしかない。


Rust Language Server(RLS)とは

言語開発をする上で、IDEやエディタに補完機能、構文解析等の機能を統一的に提供するために定められた language server protocol のRustのための実装。

公式リポジトリは https://github.com/rust-lang-nursery/rls

2017/12現在ではまだnightlyだが、安定版リリースは2018年前半を目標としているらしい


用意するもの


RLSのインストール

RLSがrustupに対応したので、rustupのみでインストール可能

現在RLSは開発段階のものなので、正式なリリースは存在しない。そのため、ツールチェインはnightlyのものを使用する必要がある。

大体公式リポジトリの説明に書いてある内容。



  1. rustup update nightlyを実行してツールチェインをアップデートする


  2. rustup component add --toolchain=nightly rust-analysis で、標準ライブラリのメタデータを取得


  3. rustup component add --toolchain=nightly rls-previewでrls本体をインストール


  4. rustup component add --toolchain=nightly rust-src で、rust本体のソースをDLする



成功すれば、rustup run nightly rlsを実行すると、rlsプロセスが起動する。(Ctrl+Cで停止)

コンポーネントの更新は、rustup update nightlyで一括更新される


vscodeプラグインの設定

ほとんどデフォルトで動作するが、rust.cfg_testは、テストプロジェクトがある場合はtrueにしておかないと、テストコードを解析してくれないので注意。


確認方法


  1. コマンドプロンプトで、cargo new --bin [プロジェクト名]で新規プロジェクトを作成

  2. ディレクトリが作成されるので、vscodeでフォルダを開く

  3. .rsファイルを開いた時、下の方にRLS: doneという表示が出ればOK

プラグインとRLSからの出力メッセージは"Rust Language Server"で確認可能。

詳しいメッセージが欲しい場合は、rust-client.revealOutputChannelOnを設定する。


RLSの設定項目

まだ予告なしに変わるかもしれない段階なので、ここでは詳細に書かないが、

https://github.com/rust-lang-nursery/rls/blob/master/README.md の"Configuration"節を参考にしてRLSの挙動を制御できる。

基本的にはsettings.jsonに対応する項目があるので、それを設定する。


注意点

2017/12現在、Cargo.tomlで指定したような外部crateへの定義ジャンプは可能だが、標準ライブラリにはジャンプできないので、

ウェブのドキュメントを合わせて読むようにすると良い。


rls-previewが消える場合

nightlyの取得タイミングによっては、rls-previewが消えるらしいとのこと。

https://github.com/rust-lang-nursery/rls/issues/611

現在根本的な解決策を考えている段階らしいので、とりあえずの対処法を記しておく。


  1. rls-previewが存在するバージョンを探す(記事執筆時点で確認されているのはnightly-2017-12-01)


  2. rustup install [確認したバージョン]を実行して、特定バージョンのツールチェインを入れる


  3. rustup component add rls-preview rust-src rust-analysis --toolchain [確認したバージョン] で必要コンポーネントをインストールする

  4. vscodeのユーザー設定ファイルを開き、rust-client.channelの値に、確認したバージョンを入れる

どのバージョンが有効か、という効率の良い特定方法は現在調査中。


使ってみた感想

コード補完、文法エラー、定義に移動等、必要と思う機能は一通り揃っているため、割と制約が多いrustでは多いに開発の役に立つのではないかと思う。

ただし、メソッドチェーンでつなげた場合の補完がうまくいかなかったりなど、VSに慣れているとちょっと不便だなという所もまだある。

早く正式リリースになってほしいなぁと思う。