Neovim luaのlsとしてemmyluaを使ってみる
Neovimのlua用language serverといえばlua-language-serverが(たぶん)定番です↓
が、さいきんemmylua_lsがHomebrewに追加されたことで俄に気になりはじめました↓
emmylua-analyzerには、language serverを起動するemmylua_lsだけでなくemmylua_checkというコマンドも用意されており、エディタとcliでのチェックを共通化できるのがポイントです。
cliコマンドがあったほうがAIエージェントに「ここ修正して」と指示しやすくなるんじゃないかなと思い導入してみました。
設定
筆者の既存のlua-lsの設定は以下に書いたような感じです。
これをemmyluaに移行します。すでにlspconfigにはemmyluaの設定ファイルが存在するので、これを利用します。
前掲の記事のとおり、Neovim >= 0.11であれば、lspconfigを読み込んでemmylua_lsをenableするだけで起動設定は完了です。
-- lspconfigの読み込みはプラグインマージャによって異なる
add('neovim/nvim-lspconfig')
-- lua_lsから移行
-vim.lsp.enable('lua_ls')
+vim.lsp.enable('emmylua_ls')
Neovimのlsp設定の方にはworkspace_required
のみを設定しています。
return {
workspace_required = true,
}
で、細かい設定はここ↑には書かず、.emmyrc.json
に記述します。これにより、cliのemmylua_checkのほうでも設定を使えます。
なお、以下は記事での解説のためにコメントをつけていますが、emmyluaは現時点ではjsoncに対応していないため、実際の設定からはコメントを除いてください。
{
"runtime": {
"version": "LuaJIT"
},
"workspace": {
"checkThirdParty": false,
"library": [
// 自分のnvim設定
"$HOME/.config/nvim/lua",
// $VIMRUNTIMEの中身
"$HOME/.nix-profile/share/nvim/runtime",
// プラグインのインストール先
// プラグインマネージャにより異なるため個人の環境に合わせて変更する
// mini.nvimの場合はstart/とopt/に分かれているのでこう書いている
"$HOME/.local/share/nvim/site/pack/deps/start/mini.nvim",
"$HOME/.local/share/nvim/site/pack/deps/opt"
],
"ignoreGlobs": [
// 筆者が個人的に作っている、もう使わなくなったluaファイル置き場
"**/deprecated/**/*.lua",
// プラグインのテストファイル等
"**/*_spec.lua"
]
}
}
以下のredditを参考にしました。
所感
lua-language-serverよりはプラグインの型の読み込み等が速くなった印象です。型の警告がより厳しく(?)出るようになったので、一部は@diagnostic disable
をつけて黙らせました。設定項目がオプショナルなのを正しく定義できていないプラグインが結構あるのかなと思いました。
動作が速めになったのは体験がよいので、しばらく使ってみようと考えています。
Discussion