46
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

背景

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に慣れているとちょっと不便だなという所もまだある。
早く正式リリースになってほしいなぁと思う。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
46
Help us understand the problem. What are the problem?