Neovim 0.11 に上げたところ、LSP 周りの関数が deprecated になっていた。

init.lua を開いたら Derecated の警告が出ていて驚いた。 "deprecated" message is shown

deprecated-0.11

:help deprecated で非推奨になったものを見ることができる。

今回、対応したのは3つ。

  • vim.lsp.with()
  • vim.diagnostic.goto_next()
  • vim.diagnostic.goto_prev()

vim.lsp.with() の非推奨化対応

以下のようなホバー時に丸角の枠を付けるために使用していた。

vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(
    vim.lsp.handlers.hover, { border = 'rounded' }
)

vim.api.nvim_create_autocmd("LspAttach", {
    callback = function()
        vim.keymap.set('n', 'K', function()
            vim.lsp.buf.hover()
        end, { buffer = true })
    end
})

ヘルプなどを見ていくと、LSP系でフローティング・ウィンドウ(?)を出すような関数は、パラメーターを直接渡せることが分かった。 (使用可能パラメーターは :help vim.lsp.util.open_floating_preview.Opts 辺りを参照) vim.lsp.with() は不要になったのだ。

vim.api.nvim_create_autocmd("LspAttach", {
    callback = function()
        vim.keymap.set('n', 'K', function()
            vim.lsp.buf.hover({ border = 'rounded' })
        end, { buffer = true })
    end
})

vim.diagnostic.goto_next()goto_prev() の非推奨化対応

こちらは、 vim.diagnostic.jump() を使うことを推奨されている。 count に正の値を入れると次へ、負の値だと前へジャンプする関数に統合されたわけだ。

vim.keymap.set('n', 'g]', function() vim.diagnostic.jump({ count = 1 }) end, { buffer = true })
vim.keymap.set('n', 'g[', function() vim.diagnostic.jump({ count = -1 }) end, { buffer = true })

こちらも vim.lsp.with() を使って枠を付けたりしていたが、 vim.diagnostic.config() で設定可能になることが分かった。 以下の floatjump の項目を追加して対応。

vim.diagnostic.config({
    -- ...
    float = { border = 'double', severity_sort = true },
    jump = { float = true }
})