北は大雨で南は酷暑でどうなってんだろうね、という感ですが、いかがお過ごしでしょうか。

気付いたら二ヶ月くらいなんも書いてませんでした。とはいえ今色々やってはいるものの形になるまで時間がかかるねぇ、というところなので、一旦草埋めとして簡単に投下しておきます。

Emacsでのlspクライアント

Emacsでは、よく使われるLSPクライアントとして、 lsp-modeEglotがあります。大体の差分は色々な人が書いてますが、

というのがあります。中でも最大の差分としては、 EglotはEmacsの標準に取り込まれた というところでしょうか。私は会社のPCでも個人でも大体master付近を使っているので、特に問題はないですね。

これもあって、GitHubにあるEglotのリポジトリはdiscussion用途として残されている、ということになってます。

lsp-modeから切り替えてみてどうか?

元々、編集するたびにformatする、という行為そのものが結構邪魔になるな、と思っていたので、そういった機能がすっぱり存在しないというのは個人的に軽くてよいです。フォーマットが必要ならpre-commit hookでやればよき。

ドキュメントや型の表示などについては、基本的にlsp-uiの方がビジュアル的に一日の長があるかとは思いますが、それもeldoc自体を拡張することで、child frameなどで表示することは可能です。 treemacsとかを利用してシンボル表示とかについても、imenu-listとか使えば可能です。

そう考えると、lspクライアントとして大事なのは安定性と高速な動作…になってくるのかなと。Eglotは非常に軽快な動作を提供してくれるので、利用している間のストレスはかなり少ないです。flymakeの頻度とか反映速度とかはそれなりに気にはなりますが、まぁそれはそれで調整したらいいだけですし。

eglotの設定

(leaf eglot
  :ensure t
  :hook
  ;; eglotに接続した時点でhover modeを有効にする
  (eglot-connect-hook . eldoc-box-hover-mode)
  :bind
  (:eglot-mode-map
   ("C-c r" . eglot-rename)
   ;; intellijの方と挙動を揃える
   ("C-<return>" . eglot-code-actions)
   ("M-m" . eldoc-box-help-at-point)))

お仕事ではIntelliJを使っているので、code actionsについてはそっちと揃えたりしていますが、基本的にはデフォルトのままで一旦使ってます。

本当に困らないの?

実はいくつか困ったりしてます。最近ヘビーに使ってみた感じだと、以下のような課題があります。

現状はまぁそこまで致命的なものはないかな、とは思いつつ、ちょいちょいうーむ、という部分はあったりします。とはいえそれはlsp-modeもそうなので…。 Eglotの場合、そもそもEmacs標準の機能とintegrationされているので、LSPクライアントを変更するというよりは、それぞれのパッケージで改変していけばいいんでない?というのもありますね。

実際困らないかは、本人の使い方にもよってくると思うので、ちょろっと試してみてはいかがでしょうか。最近はlsp-bridgeというのもあるようです(lsp-bridgeは真逆で、色々自前で作りこんでます)し、この暑さに対する気分転換になるとも思います。