概要
デフォルトでは Rubygems からインストールしたライブラリなどは補完の対象になっていません
今回は Gemfile などを使ってインストールしたライブラリの補完を solargraph を使って行う方法を紹介します
環境
- macOS 11.5.2
- emacs 27.1
- solargraph 0.43.0
- Ruby 3.0.1p64
bundler 配下で solargraph を管理する
前回はグローバルに solargraph をインストールしました
すでにプロジェクトがありそれが bundler で閉じている場合、グローバルの solargraph ではなく bundler 配下の solargraph を使います
- cd /path/to/workspace
- vim Gemfile
gem "solargraph"
gem "yard"
- bundle install
yard ドキュメントの生成
ポイントは yard ドキュメントを生成する必要がある点です
solargraph をインストールすると yard の gem も同時にインストールされておりこれを使って yard ドキュメントを生成しましょう
初回生成時は時間のかかる場合があります
- cd /path/to/workspace
- bundle exec yard gems
vendor 配下の各 gem に .yardoc ファイルが生成されていれば OK です
生成されたパスを調べたい場合は --debug オプションを使います
- bundle exec yard gems --debug
グローバルな solargraph の停止
もしすでにグローバルにインストールした solargraph が起動している場合は停止しましょう
emacs から自動起動する設定が記載されている場合は一旦その行をコメントして emacs を再起動しましょう
eglot の起動
emacs 側から接続しにいきます
ここでもポイントがあり eglot から solargraph を起動する場合に bundler 配下の solargraph を起動するようにします
なのでまず emacs のバッファのワークディレクトリを変更します
- M-x cd
- /path/to/workspace に移動する
そして bundle exec 経由で solargraph を起動すれば OK です
- C-u M-x eglot
- bundle exec solargraph socket --port :autoport:
これで「[eglot] Connected! Server EGLOT (pjct-name/ruby-mode) now managing ‘ruby-mode’ buffers in project ‘pjct-name’.」となれば接続完了です
動作確認
サードパーティの gem にカーソルを合わせるとちゃんと補完が表示されます
最後に
ポイントは以下の2点です
- bundle exec yard gems で bundler 配下にインストールした gem のドキュメントを生成する
- グローバルの solargraph ではなく bundler 配下にインストールした solargraph を eglot から起動する
のがポイントです
おまけ: 対象クラスのスキャン
- cd /path/to/workspace
- solargraph scan -v
おまけ: 設定ファイルの作成
- cd /path/to/workspace
- solargraph config