🖖

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を発見

https://github.com/mason-org/mason.nvim/issues/1929

解決策も書いてあった。

mason, mason-lgspconfigのバージョンをv1系に固定すれば動くとのこと。

issueの通りversionを固定して、無事動くようになった 🎉

「nvimをversion 0.11.0にあげたら治る」とのコメントもあったが、自分はこれでは治らなかった。
「versionnの固定」は解決策として微妙ではあるが、とりあえずはversionを固定して対処した。

Discussion