feat(nvim): add manual mode for LSP servers
Allow LSP servers to be enabled on-demand via a buffer-local command instead of auto-starting on matching filetypes. The command name is auto-derived from the server name (e.g. 'GolangciLint'). Switch golangci-lint to manual mode as it's resource-heavy and not always needed.
This commit is contained in:
@@ -98,10 +98,30 @@ local default_config = {
|
|||||||
on_attach = on_attach,
|
on_attach = on_attach,
|
||||||
}
|
}
|
||||||
|
|
||||||
local setup_lsp = function(name, config)
|
local setup_lsp = function(name, config, opts)
|
||||||
|
opts = opts or {}
|
||||||
local final_config = vim.tbl_deep_extend("force", default_config, config or {})
|
local final_config = vim.tbl_deep_extend("force", default_config, config or {})
|
||||||
|
|
||||||
vim.lsp.config(name, final_config)
|
vim.lsp.config(name, final_config)
|
||||||
|
|
||||||
|
-- Manual Mode - Register a buffer-local command instead of auto-enabling.
|
||||||
|
-- The command name is derived from opts.cmd_name or the LSP name.
|
||||||
|
if opts.manual then
|
||||||
|
local cmd_name = opts.cmd_name or name:gsub("^%l", string.upper):gsub("_%l", function(s)
|
||||||
|
return s:sub(2):upper()
|
||||||
|
end)
|
||||||
|
local fts = final_config.filetypes or {}
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = fts,
|
||||||
|
callback = function(ev)
|
||||||
|
vim.api.nvim_buf_create_user_command(ev.buf, cmd_name, function()
|
||||||
|
vim.lsp.enable(name)
|
||||||
|
end, { desc = "Enable " .. name .. " LSP" })
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
vim.lsp.enable(name)
|
vim.lsp.enable(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -244,7 +264,7 @@ setup_lsp("golangci_lint_ls", {
|
|||||||
"--issues-exit-code=1",
|
"--issues-exit-code=1",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
}, { manual = true, cmd_name = "GolangciLint" })
|
||||||
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
--------------------- None-LS LSP --------------------
|
--------------------- None-LS LSP --------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user