❓
neovim lsp でrust-analyzerの診断エラーの下線が消えない問題を無理やり対処した
rust-analyzerの診断エラーの下線が消えない。なぜだ。
- item2
- neovim v0.10.4
lspconfigの設定でunderline=falseに設定した。lua_lsでは確かに下線が消えているが、rust_analyzerでは消えない。
なぜ消したいかというとunderlineが大量に表示された状態でのカーソル移動が遅すぎる。これもまた原因がよくわからない。調査能力不足。
とりあえず。下線がなければカーソル移動が通常とかわらないことはわかった。
on_attachでunderlineをオフにする。
rust_analyzerのon_attachで設定すれば効くことがわかったのでこれでとりあえず対処。
vim.diagnostic.config({ underline = false })
{
"neovim/nvim-lspconfig",
config = function()
-- エラー文言などを画面に直接出さない
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
underline = false,
virtual_text = false,
signs = true,
update_in_insert = false,
})
---- キーマップの設定
local opts = { noremap = true, silent = true }
---- 定義
vim.api.nvim_set_keymap("n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
---- 参照
vim.api.nvim_set_keymap("n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
end,
},
mason-lspconfigでの設定抜粋
local function setup_lua_ls(config)
-- lua_ls固有の設定を追加
config.settings = {
Lua = {
runtime = { version = "LuaJIT", path = vim.split(package.path, ";") },
diagnostics = { globals = { "vim" } },
-- vimのライブラリを読み込めるようにする
workspace = { library = vim.api.nvim_get_runtime_file("", true) },
telemetry = { enable = false },
},
}
end
local function setup_rust(config)
config.on_attach = function(client, bufnr)
---- diagnostic 下線を非表示。nvim-lspconfigの設定が効かないのでここで設定
vim.diagnostic.config({ underline = false })
-- フォーマッター
if client.server_capabilities.documentFormattingProvider then
vim.api.nvim_buf_set_keymap(
bufnr,
"n",
"<leader>f",
":lua vim.lsp.buf.format({ async = true })<CR>",
{ noremap = true, silent = true }
)
end
end
end
local server_configs = {
lua_ls = setup_lua_ls,
rust_analyzer = setup_rust,
}
require("mason-lspconfig").setup_handlers({
function(server_name)
local config = {
capabilities = vim.tbl_deep_extend(
"force",
vim.lsp.protocol.make_client_capabilities(),
require("cmp_nvim_lsp").default_capabilities()
),
}
config.capabilities.workspace.didChangeWatchedFiles.dynamicRegistration = false
-- 言語サーバーごとの設定関数を呼び出す
if server_configs[server_name] then
server_configs[server_name](config)
else
setup_default(config)
end
require("lspconfig")[server_name].setup(config)
end,
})
Discussion