2021年8月31日火曜日

LSP solargraph で rubygems にある gem のコード補完を行う方法

LSP solargraph で rubygems にある gem のコード補完を行う方法

概要

デフォルトでは 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

参考サイト

0 件のコメント:

コメントを投稿