NeovimのLSPで誰にどうして怒られたのかを確認するための設定
どうも。CX事業本部Delivery部のえーたん(@eetann092)です。
NeovimのLSPのDiagnosticsで、誰に怒られているのか知りたくなったので、表示形式を変更してみました。
本記事では、Neovimとnull-ls.nvimでDiagnosticsの表示形式を変更する設定を紹介します。せっかくなので調査の流れも書いておきます。
NeovimのDiagnosticsの表示形式を変更する
まずはNeovimでの設定するために、:h diagnostic
でドキュメントを漁りました(diagnostic-api
に飛びました)。
vim.diagnostic.config()
のパラメータvirtual_text
のオプションformat
を発見しました。このformat
でDiagnosticsの表示を変えることができるようです。
以下のように設定を追加しました。
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { update_in_insert = false, + virtual_text = { + format = function(diagnostic) + return string.format("%s (%s: %s)", diagnostic.message, diagnostic.source, diagnostic.code) + end, + }, })
format
の引数diagnostic
の構造については、同じようにドキュメントを漁り、:h diagnostic-structure
に書かれていることを見つけました。
パラメータvirtual_text
には、diagnostic.source
を挿入するオプションsource
もあります。せっかくなのでオプションsource
の実装を見たところ、メッセージの先頭にdiagnostic.source
を追加してくれるようです。今回はdiagnostic.source
をメッセージの後ろの方に表示したかったため、オプションsource
は使いませんでした。
null-ls.nvimのDiagnosticsの表示形式を変更する
次にnull-ls.nvimでの設定です。こちらはドキュメントに書かれていました。デフォルトのフォーマットは#{m}
(メッセージのみ)です。
以下のように設定を追加しました。
local null_ls = require("null-ls") null_ls.setup({ + diagnostics_format = "#{m} (#{s}: #{c})", -- 省略 })
先程設定したNeovim本体の表示形式と同じようにするため、「メッセージ、ソース、コード」の順にしました。
最後に
textlintでルールを無視したい時に便利だと思って設定してみました。
本記事で出てきたパラメータvirtual_text
やnull-ls.nvimには他にもオプションがあるので、ぜひヘルプやドキュメントを読んでみてください。