EmacsでRust & Language Server 使おうとしたらコード補完でハマった

タイトルの通り Emacs で Rust & Langage Server を使おうとしたら、ハマってしまい、1週間ほど試行錯誤しちまったのでその過程をちょいと残しておく

tl;dr

今回はこれで落ち着いた

  • コード補完には Racer & racer-emacs がやっぱり必要
  • それ以外1は RLS & lsp-mode
  • company-lsp で補完を出さずに lsp-mode の builtin の仕組みをつかう

f:id:toku345:20190316212943p:plain
racer&lsp-mode共存

ハマりどころ

lsp-mode & Rust Language Server (RLS) & company-lsp を試してみたところ、コード補完の選択肢が表示されなくなってしまった2

lsp-mode の READMEには completion(コード補完) できてるスクショがあるのに...

f:id:toku345:20190316215235p:plain
lsp-mode README のスクショ

ちなみに、Python は lsp-mode & python-language-serverで、

f:id:toku345:20190316213851p:plain
lsp-mode&python-langage-server

Ruby は lsp-mode & solargraph

f:id:toku345:20190316214017p:plain
lsp-mode&solargraph

で補完できることは確認済み

謎は深まるばかり...

気づき

ん?RLS 単体ではコード補完できなそう??

f:id:toku345:20190316213347p:plain
RLS

RLS チームが主ターゲットにしている VS Code実装3でも racer を使うような設定があるぞ!

company-lsp 作者 tigersoldier氏 の emacs設定 を覗いてみると...

(spacemacsの設定で) racer-emacs は有効になっていて、complete-lsp は rust-mode では有効になってないことがわかった(ここなどみるとc/c++, php, javaなどでのみ有効になっている)

ということで、混乱の素となった company-lsp を辞めて 素直にコード補完に Racer & racer-emacs を使うようになったらちゃんと補完できるようになった。 PythonRuby のコード補完も lsp-mode の builtin の機能で十分コード補完が使えるの、しばらくこのまま使ってみよう(完)


  1. 関数シグネチャーの表示、定義部ジャンプ、参照箇所の一覧 など

  2. lsp-mode & RLS を試す前は Racer & racer-emacs を使ってコード補完できていた

  3. VS Code & rls-vscode で補完できるのは確認済み