ここしばらく、Rustのリハビリをしている。Emacsでの開発では、lsp-mode + lsp-ui + rust-modeでやってきていた。LSPのサーバはrls。

だが最近、動作がおかしい。rls起動直後は動作していたものが動かなくなったり。補完が効いたり効かなかったり。ログを見てもよくわからない、が、rlsからの応答がおかしそう。エラーは報告していないのだけれども。今はrust-analyzerというLSPサーバもあるので、乗り換えてみることにした。ついでに、rust-modeをrustic-modeに変更した。

rust-analyzer

rust-analyzerは、rls-2.0計画の一部。私の環境では今のところ安定して動いているが、あくまでもまだexperimental。

インストール方法はいくつかあるが、私はソースからビルドする方法をとった。

git clone git@github.com:rust-analyzer/rust-analyzer.git
cd rust-analyzer
cargo xtask install --server

これで、$HOME/.cargo/binにrust-analyzerがインストールされる。

Emacs側

パッケージとしては、rust-mode, flycheck-rustをアンインストールした上で、rusticをインストールする。

init.elは今までこうだったものが

;; before
(add-to-list 'exec-path (expand-file-name "~/.cargo/bin/"))
(eval-after-load "rust-mode"
   '(setq-default rust-format-on-save t))
 (add-hook 'rust-mode-hook (lambda ()
                             (flycheck-rust-setup)
                             (lsp)
                             (flycheck-mode)
                           ))

こうなる。

;; after
(add-to-list 'exec-path (expand-file-name "~/.cargo/bin/"))
(setq-default rustic-format-trigger 'on-save)
(setq rustic-lsp-server 'rust-analyzer)

lspやflycheckのサポートはrusticに最初から入っているので、シンプル。