nvim: lsp: Add support for reloading Cargo workspace
While at it, refactor the custom setup and clean up for clients in a single function.
This commit is contained in:
parent
269382b363
commit
5674bbdc06
2 changed files with 31 additions and 14 deletions
|
@ -11,6 +11,7 @@ vim.keymap.set('n', 'cbc', ":Dispatch! cargo clean<CR>" , { noremap=true, bu
|
|||
vim.keymap.set('n', 'cbd', ":Dispatch! cargo doc<CR>" , { noremap=true, buffer=0 })
|
||||
vim.keymap.set('n', 'cdD', ":Dispatch! cargo doc --open<CR>", { noremap=true, buffer=0 })
|
||||
vim.keymap.set('n', 'cbu', ":Dispatch! cargo update<CR>" , { noremap=true, buffer=0 })
|
||||
vim.keymap.set('n', ',r' , ":CargoReload<CR>" , { noremap=true, buffer=0 })
|
||||
|
||||
vim.api.nvim_create_autocmd({ "BufReadPre", "BufWinEnter" }, {
|
||||
pattern = { "*/git/checkouts/*", "*/toolchains/*", "*cargo/registry/*" },
|
||||
|
|
|
@ -80,12 +80,18 @@ local lsp_key_mappings = {
|
|||
{ "codeLensProvider", 'n', '<LocalLeader>L', '<cmd>lua vim.lsp.codelens.clear()<CR>' },
|
||||
}
|
||||
|
||||
local tsserver_setup = function(client)
|
||||
if client.name == 'tsserver' then
|
||||
-- Disable tsserver formatting, we want formatting via prettier
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
client.server_capabilities.documentRangeFormattingProvider = false
|
||||
end
|
||||
local cargo_reload_workspace = function()
|
||||
vim.lsp.buf_request(0, 'rust-analyzer/reloadWorkspace', nil, function(err)
|
||||
if err then
|
||||
vim.schedule(function()
|
||||
vim.notify('Cargo reload workspace gave error: ' .. tostring(err), vim.log.levels.ERROR)
|
||||
end)
|
||||
else
|
||||
vim.schedule(function()
|
||||
vim.notify 'Cargo workspace reloaded'
|
||||
end)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local get_active_client_by_name = function(bufnr, servername)
|
||||
|
@ -124,16 +130,30 @@ local switch_source_header = function()
|
|||
end
|
||||
end
|
||||
|
||||
local clangd_setup = function(client)
|
||||
local client_custom_setup = function(client)
|
||||
if client.name == 'clangd' then
|
||||
vim.api.nvim_create_user_command("ClangdSwitchSourceHeader", switch_source_header, {desc = 'Switch between source/header'})
|
||||
end
|
||||
|
||||
if client.name == 'rust-analyzer' then
|
||||
vim.api.nvim_create_user_command("CargoReload", cargo_reload_workspace, {desc = 'Reload current cargo workspace'})
|
||||
end
|
||||
|
||||
if client.name == 'tsserver' then
|
||||
-- Disable tsserver formatting, we want formatting via prettier
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
client.server_capabilities.documentRangeFormattingProvider = false
|
||||
end
|
||||
end
|
||||
|
||||
local clangd_cleanup = function(client)
|
||||
local client_custom_cleanup = function(client)
|
||||
if client.name == 'clangd' then
|
||||
vim.api.nvim_del_user_command("ClangdSwitchSourceHeader")
|
||||
end
|
||||
|
||||
if client.name == 'rust-analyzer' then
|
||||
vim.api.nvim_del_user_command("CargoReload")
|
||||
end
|
||||
end
|
||||
|
||||
local on_attach = function(client, bufnr)
|
||||
|
@ -146,11 +166,7 @@ local on_attach = function(client, bufnr)
|
|||
|
||||
local opts = { noremap=true, silent=true }
|
||||
|
||||
-- This needs to be here, so we disable formatting with tsserver before
|
||||
-- actually checking it below.
|
||||
tsserver_setup(client)
|
||||
|
||||
clangd_setup(client)
|
||||
client_custom_setup(client)
|
||||
|
||||
for _, mappings in pairs(lsp_key_mappings) do
|
||||
local capability, mode, lhs, rhs = unpack(mappings)
|
||||
|
@ -219,6 +235,6 @@ vim.api.nvim_create_autocmd("LspDetach", {
|
|||
end
|
||||
end
|
||||
|
||||
clangd_cleanup(client)
|
||||
client_custom_cleanup(client)
|
||||
end,
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue