Lua スクリプトで NeoVim の設定ファイルを記述する際、NeoVim やプラグインの API のドキュメントや型情報を見たり補完を受けることができると便利です。補完を効かせる方法はいくらか存在しますが、筆者の環境では (筆者の知識不足によるものですが) 設定の変更によって有効化されたりされなかったりとなかなかうまく行かないことが多くありました。そうこうしているうちに、ランタイムでの動作なく確実に補完を効かせる設定を見つけ出しました。
環境
NeoVim: v0.11.6
lua-language-server: 3.17.1
プラグイン: lazy.nvim, blink-cmp.nvim, nvim-lspconfig
既存の方法
LazyDev を使う方法
LazyDev を nvim-cmp, blink-cmp などのプロバイダに設定する方法です。Lazy.nvim を使用している場合は最も手軽な方法と思われます。筆者の環境では時折うまく動作しないことがありました。
lspconfig を使う方法
nvim-lspconfig の setup を呼び出してクライアントのワークスペースを設定する方法です。この方法は lua-language-server の設定をランタイムで書き換える方法です。NeoVim のネイティブ LSP が実装される以前の方法であるためそのまま使用できませんが、ある程度動作すると思われます。
lua-language-server の設定をする方法
lspconfig を使う方法に着想を得て、lua-language-server の設定ファイルを変更することで NeoVim とプラグインの情報を読み込ませることにしました。この方法では init.lua と同じディレクトリに設定ファイル .luarc.json を配置し、以下の内容を記述します。(おそらく筆者の環境で LazyDev が動かないのは .luarc.json が存在するためでしょう。)
{
"$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json",
"runtime": {
"version": "LuaJIT"
},
"workspace.library": [
"/usr/share/nvim/runtime/lua",
"~/.local/share/nvim/lazy"
]
}
workspace.library には NeoVim ランタイムのパスと lazy.nvim のルートパスを記述します。この部分は環境により変化する可能性があります。(その点で動的な手法が優れているという考え方もできますが、筆者は一旦この方法に落ち着きました)
標準的な Lua LSP の設定がされていれば、これだけで workspace.library に記述したディレクトリがライブラリとして取り込まれます。