Neovimのdiagnosticの設定を見直す
Neovim docsのDeprecated(:h deprecated)を見ていたらvim.diagnostic.configを使っていろいろ設定できることを把握。
せっかくの機会なのでNeovimのDiagnosticの設定を見直すことにしました。
virtual_textのformat
筆者は、お怒りになっている方・理由を知るためにdiagnosticのformatを変更しています。

このルールだけはオフにしておきたいな、というときに怒られ元が分かると便利なんです。textlintとか。
このformatの変更について、LSP・none-ls.nvimの2つに分けて紹介します。
LSPの怒られ
以前書いた記事の時点ではハンドラを書き換えていましたが、vim.diagnostic.configで書けるようです。
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = { format = function(diagnostic) return string.format("%s (%s: %s)", diagnostic.message, diagnostic.source, diagnostic.code) end, },})formatの関数の中身はそのままです。
vim.diagnostic.config({ virtual_text = { format = function(diagnostic) return string.format("%s (%s: %s)", diagnostic.message, diagnostic.source, diagnostic.code) end, },})これについては当時の調査不足なのか、普通に後から書けるようになったのか、当時は何らかの理由でvim.lsp.handlerを使う必要があったのか、正直分かりません。
none-ls.nvimの怒られ
none-lsについても触れます。
none-lsで扱うものはLSPではないため、vim.lsp.handlersを使っていたころはdiagnostics_formatの設定が別途必要でした。
local null_ls = require("null-ls")null_ls.setup({ diagnostics_format = "#{m} (#{s}: #{c})", -- 省略})しかし、vim.diagnostic.configを使うことでformatの指定がLSPではないnone-lsにも設定できるようになりました。diagnostics_formatを使うと二重に表示されてしまうことになるため、消します。
local null_ls = require("null-ls")null_ls.setup({ diagnostics_format = "#{m} (#{s}: #{c})", -- 省略})update_in_insert
挿入モードのときにdiagnosticを更新させないupdate_in_insertをfalseに設定していました。
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { update_in_insert = false,})こちらもvim.diagnostic.configで設定できるようになった!と思い設定しましたが……。
vim.diagnostic.config({ update_in_insert = false, -- その他の設定})ドキュメントをよく読んだところ、デフォルトがfalseだったので設定しなくて良かったようです。
vim.diagnostic.config({ update_in_insert = false, -- その他の設定})sign_defineからvim.diagnostic.configへ
バージョン0.10から、:sign-defineとsign_define()がDeprecated(非推奨)になるようです。
vim.fn.sign_define("DiagnosticSignError", { text = "", texthl = "DiagnosticSignError" })vim.fn.sign_define("DiagnosticSignWarn", { text = "", texthl = "DiagnosticSignWarn" })vim.fn.sign_define("DiagnosticSignInfo", { text = "", texthl = "DiagnosticSignInfo" })vim.fn.sign_define("DiagnosticSignHint", { text = "", texthl = "DiagnosticSignHint" })vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = "", [vim.diagnostic.severity.WARN] = "", [vim.diagnostic.severity.INFO] = "", [vim.diagnostic.severity.HINT] = "", }, },})ちなみに筆者はNeovimの更新をサボってv0.9.4であるため、まだ試しておらずコメントアウトにしています。
Code Actionのプラグインを見直す
ついでにLSP関連のプラグインも見直しました。nvim-code-action-menuがアーカイブされていたようです。
Code Actionのアクションを適用したらどうなるのかプレビューで表示してくれて便利だったのでした。
代わりとして、actions-preview.nvimを使うことにしました。

Nerd Fonts
LSPもろもろの設定をしているとたまにNerd Fontsのアイコンを検索したくなるのでNerd Fontsのチートシートを張っておきます。

ついでによく使いそうな検索ワードも載せておきます。
| 内容 | 検索ワード |
|---|---|
| バツ印 | remove、x |
| 警告 | warn |
iマーク | info |
| 電球 | lightbulb、bulb |
| 虫眼鏡マーク | magnify |
| 虫マーク | bug |
| バッテリー | battery |
以上、NeovimのDiagnosticとCode Actionの見直しでした。