概要
過去に eglot + solargraph を使った方法を紹介しましたが lsp-mode を使うほうがオススメです
環境
- macOS 11.5.2
- emacs 27.1
- lsp-mode 20210831.1901
- solargraph 0.43.0
solargraph のインストール
今回は bundler 配下で管理します
プロジェクトがそもそも bundler で管理されている場合は bundler 配下の gem も補完対象にするためにグローバルな solargraph ではなく bundler 配下にインストールした solargraph を使う必要があります
- vim Gemfile
gem "solargraph"
- bundle install
また yardoc が必要なので生成します
- bundle exec yard gems
- bundle exec solargraph bundle
- bundle exec solargraph download-core
lsp-mode のインストール
package.el から lsp-mode をインストールします
- M-x package-list-packages
.emacs 設定
ruby-mode で自動起動する設定と bundler 配下の solargraph を仕様する設定を追加します
(require 'lsp-mode)
(setq lsp-solargraph-use-bundler t)
(add-hook 'ruby-mode-hook 'lsp)
lsp-mode を起動するのではなく lsp を起動するのがポイントです
またプロジェクトの初回オープン時には以下のような確認が出ることがあるのでプロジェクトのルートパスを確認して選択しましょう
動作確認
あとは .rb ファイルを開けば OK です
自動で bundler 配下の solargraph を起動してくれます
基本的な操作は以下の通りです
- M-. カーソルのあるモジュールやメソッドへジャンプする
- M-, ジャンプ元に戻る
- C-M-i 補完候補の表示
トラブルシューティング
うまくジャンプや補完が動作していない場合は bundler 配下の solargraph ではなくグローバルの solargraph が起動している可能性があります
一度グローバル側の solargraph を削除して再度 lsp-mode を起動して挙動を確認してみましょう
その他
- require_relative で参照している先の ruby ファイルは補完してくれない (設定ミス?)
- lsp-ruby や lsp-ui をインストールする必要はない
- 生成したオブジェクトから参照可能なメソッドや変数を補完してくれない
- 原因は module に配下にあるメソッドなどは補完対象ではないためです
- gmail などの gem は module ベースでオブジェクトを生成するため生成したオブジェクト配下のメソッドは solargraph では参照できないためです
- その場合は bundle exec irb か公式のリファレンスを参照しましょう
- 複数のプロジェクトがある場合には先に起動した lsp を参照してしまうのでワークスペースを分けてプロジェクトを管理しましょう
最後に
eglot の場合 flymake がうまく動作していなかったのですが lsp-mode はうまく動作しました
require_relative を参照しないなど完全に動作するわけではないですが十分強力な機能かなと思います
(robe よりもいいかも 参考)
solargraphは基本的にbundle配下で使う感じになります
返信削除bundle exec solargraph bundle も実行しましょう
返信削除