skip to content
私的歌詞倉庫

nvimでsolargraphのプラグインを使ってRailsやRspecの補完を効かせる

/ 4 min read

Updated:
Table of Contents

はじめに

自分は、Rails(Ruby)を書くときにsolargraphを使っています。solargraphは単体で使ってもある程度補完をしてくれて便利なのですが、RailsやRspecなどで使うと微妙に補完してくれないことがあります。

例えばRspecでletdescribed_class使って変数を定義しても、solargraph単体ではその変数を型情報などと一緒に補完してくれません。

これらを補助するためにsolargraphにはプラグインというものがあり、Railsの補完をしたいならsolargraph-rails、Rspecの補完をしたいならsolargraph-rspecなどがあります。

VSCodeだとvscode-solargraphをインストール後、使用したいプラグインをgem installして、.solargraph.yml に設定を書くだけで使うことができました。

しかし、nvimだとmason経由でインストールしただけではうまくプラグインを読み込んでくれず、GitHub上で色々検索すると動くものを見つけて、どうにか動かすことができました。

設定

まずは必要なgemをグローバルにインストールします。

gem install solargraph
gem install solargraph-rails
gem install solargraph-rspec

次にnvimの設定にmasonでインストールしたsolargraphではなく、グローバルにインストールした方を起動するようにします。

local lsp_config = require("lspconfig")
local mason_lspconfig = require("mason-lspconfig")
local capabilities = require("cmp_nvim_lsp").default_capabilities()
mason_lspconfig.setup()
mason_lspconfig.setup_handlers({
function(server_name)
local server_config = { capabilities = capabilities }
if server_name == "solargraph" then
server_config = {
filetypes = { "ruby" },
root_dir = lsp_config.util.root_pattern("Gemfile"),
cmd = { os.getenv("HOME") .. "/.rbenv/shims/solargraph", "stdio" },
settings = {
solargraph = {
diagnostics = true,
},
},
}
end
server_config.on_attach = on_attach
lsp_config[server_name].setup(server_config)

最後にRailsプロジェクト直下でyard gemsして、solargraphの設定ファイルをsolargraph configで生成します。生成した設定ファイルに使用するプラグインを追記します。

include:
- "**/*.rb"
exclude:
- spec/**/*
- vendor/**/*
- ".bundle/**/*"
require: []
domains: []
plugins: ["solargraph-rspec", "solargraph-rails"]
reporters:
- rubocop
- require_not_found
max_files: 5000

これでファイルを開くと補完されました(もし補完されなかったら、yard gems の前にrailsやrspecをグローバルにインストールする必要があるかもです)。

letで定義したheaders変数を型付で補完

letで定義したheaders変数を型付で補完

described_classを型付で補完

described_classを型付で補完

終わりに

nvimでRailsやRspecの補完を効かせるようにしました。本当はグローバルにインストールするのではなくmason経由で動かせると良かったのですがよく分からず妥協しました…

いずれどうにかしたいなぁ

参考文献