Neovimをアップデートしたら怒られたので備忘録。調査手順と事前にできる対応

Neovimをアップデートしたときの備忘録です。
2022.10.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも。CX事業本部Delivery部のえーたん(@eetann092)です。

先日Neovimv0.8.0がリリースされました。 アップデート後、Neovimを起動すると非推奨のAPIについてのメッセージが表示されたため、その対応を記録しておきます。

メッセージ内容と対策

client.resolved_capabilitiesは非推奨

まず最初に表示されたのは、以下のようなメッセージです(適宜改行してます)。LSPの機能判定に使用していたclient.resolved_capabilitiesが非推奨になり、代わりにclient.server_capabilitiesを使ってください、という内容でした。

[LSP] Accessing client.resolved_capabilities is deprecated,
update your plugins or configuration to access client.server_capabilities instead.
The new key/value pairs in server_capabilities directly match those defined in the language server protocol
Press ENTER or type command to continue

また、対象のLSPがフォーマッター機能を持つ場合は保存時にフォーマットするように設定していました。

  if client.resolved_capabilities.document_formatting then
    vim.api.nvim_create_autocmd({ "BufWritePre" }, {
      group = "my_nvim_rc",
      buffer = bufnr,
      callback = function()
        vim.lsp.buf.formatting_sync({}, 2500)
      end,
    })
  end

client.resolved_capabilitiesclient.server_capabilitiesに変えても、フォーマッターが動きませんでした。 issueを漁ったところ、リポジトリneovim/nvim-lspconfigに以下のissueがありました。

どうやら、document_formattingではなく、documentFormattingProviderに書き換える必要があったようです。 前述のメッセージのThe new key/value pairs ...の部分はおそらくこれのことでしょう。

- if client.resolved_capabilities.document_formatting then
+ if client.server_capabilities.documentFormattingProvider then

vim.lsp.buf.formatting_syncは非推奨

if client.server_capabilities.documentFormattingProvider thenに変えてフォーマッターを動かすと、別のメッセージが表示されました。

vim.lsp.buf.formatting_sync is deprecated. Use vim.lsp.buf.format instead

vim.lsp.buf.formatting_syncが非推奨になり、代わりにvim.lsp.buf.formatを使ってください、という内容でした。

オプションについては:h vim.lsp.buf.format()から見ることができます。

事前にできる対応

他の非推奨APIや事前に仕様変更を知りたい場合、どんな方法があるかについても考えてみました。

まずは、アップデート前にリリースノートを見ることです。 リリースノートには、機能追加やバグ修正だけではなく、"Breaking changes"という項目で破壊的な変更の一覧を見ることができます。

:h deprecatedでも一部の非推奨のAPIを見ることができるようです。

もう少し具体的に知りたい場合は、breaking changes Issue #14090 neovim/neovimを見るのが良いと思います。

上記Breaking Changes Issueには、Neovimで破壊的な変更が追加される度に、関連issueへのリンクとその概要が追加されるようです。

resolved_capabilitiesが非推奨になったこともこのissueに書かれていました。

"Subscribe"ボタンを押せば、issueにコメントが追加された時に通知させることができます。

telescope.nvimnvim-cmpなども同様にBreaking Changes Issueがあるようです。