🖖
Neovimのmason.nvimで発生する`setup_handlers`エラーの解決方法
以下のようなエラーが出て困ったので、解決方法をメモ。
急いでる人向けに結論
mason, mason-lgspconfigのバージョンをv1系に固定する。
Lazy.nvimを使ってる人はこんな感じに設定すればOK
return {
{ "mason-org/mason.nvim", version = "^1.0.0" },
{ "mason-org/mason-lspconfig.nvim", version = "^1.0.0" },
}
エラーの内容
ある日を境に突然、nvimを開くと以下のエラーが出力されるように。
Failed to run `config` for mason-lspconfig.nvim
...rs/s_eguchi/.config/nvim/lua/plugins/mason_lspconfig.lua:23: attempt to call field 'setup_handlers' (a nil value)
# stacktrace:
- ~/.config/nvim/lua/plugins/mason_lspconfig.lua:23 _in_ **config**
- ~/.config/nvim/lua/config/lazy.lua:138
- ~/.config/nvim/init.lua:1
mason_lspconfig.luaの設定はこんな感じ。
return {
-- Mason: ツールの管理UI
{
"williamboman/mason.nvim",
config = true,
},
-- mason-lspconfig: mason と lspconfig の橋渡し
{
"williamboman/mason-lspconfig.nvim",
dependencies = {
"neovim/nvim-lspconfig", -- 各言語のLSP設定ライブラリ
},
config = function()
-- LSPサーバーを自動でインストール
require("mason-lspconfig").setup({
ensure_installed = { "lua_ls", "terraformls", "marksman" },
})
-- LSPサーバーを自動で lspconfig に渡す
require("mason-lspconfig").setup_handlers({ ---> **ここでエラーが出てる**
function(server_name)
local opts = {
capabilities = require("cmp_nvim_lsp").default_capabilities(),
}
-- .luaを起動した際に、"vim"のグローバル変数に対する警告を無視する。
if server_name == "lua_ls" then
opts = {
settings = {
Lua = {
diagnostics = {
globals = { "vim" },
},
},
},
}
end
require("lspconfig")[server_name].setup(opts)
end,
})
end,
},
}
エラーの内容 ...rs/s_eguchi/.config/nvim/lua/plugins/mason_lspconfig.lua:23: attempt to call field 'setup_handlers' (a nil value)
から、setup_handlers周辺が怪しい。
どうやら、lsp関連の設定が原因してるとのこと。
解決方法
mason.nvimのissueを漁っていると一番上に該当のissueを発見
解決策も書いてあった。
mason, mason-lgspconfigのバージョンをv1系に固定すれば動くとのこと。
issueの通りversionを固定して、無事動くようになった 🎉
「nvimをversion 0.11.0にあげたら治る」とのコメントもあったが、自分はこれでは治らなかった。
「versionnの固定」は解決策として微妙ではあるが、とりあえずはversionを固定して対処した。
Discussion