summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/custom/configs/lsp.lua
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-07-22 18:18:10 +0300
committerKyren223 <ulmliad223@gmail.com>2024-07-22 18:18:10 +0300
commit565e57c0155e31235eb3d2ef0a83fe36d058530a (patch)
tree790d210b24c08427e1990e66342658bbecbc7944 /.config/nvim/lua/custom/configs/lsp.lua
parent191e0471aa22ca1e70c7692d19149b47df10f439 (diff)
feat(neovim): major lsp refactor and some more lazy loading
Diffstat (limited to '.config/nvim/lua/custom/configs/lsp.lua')
-rw-r--r--.config/nvim/lua/custom/configs/lsp.lua63
1 files changed, 63 insertions, 0 deletions
diff --git a/.config/nvim/lua/custom/configs/lsp.lua b/.config/nvim/lua/custom/configs/lsp.lua
new file mode 100644
index 0000000..afae5af
--- /dev/null
+++ b/.config/nvim/lua/custom/configs/lsp.lua
@@ -0,0 +1,63 @@
+local capabilities = require('cmp_nvim_lsp').default_capabilities()
+local servers = require('custom.configs.language-servers')
+
+local lspconfig = require('lspconfig')
+for name, config in pairs(servers) do
+ if config == true then
+ ---@diagnostic disable-next-line: cast-local-type
+ config = {}
+ end
+ ---@diagnostic disable-next-line: cast-local-type
+ config = vim.tbl_deep_extend('force', {}, {
+ capabilities = capabilities,
+ }, config)
+
+ lspconfig[name].setup(config)
+end
+
+vim.api.nvim_create_autocmd('LspAttach', {
+ callback = function(args)
+ local bufnr = args.buf
+ local client = assert(vim.lsp.get_client_by_id(args.data.client_id), 'must have valid client')
+
+ local settings = servers[client.name]
+ if type(settings) ~= 'table' then
+ ---@diagnostic disable-next-line: cast-local-type
+ settings = {}
+ end
+
+ -- Override server capabilities
+ if settings.server_capabilities then
+ for k, v in pairs(settings.server_capabilities) do
+ if v == vim.NIL then
+ v = nil
+ end
+ client.server_capabilities[k] = v
+ end
+ end
+
+ -- Register LSP keymaps local to buffer
+ require('custom.configs.lsp-keymaps').setup(bufnr)
+ end,
+})
+
+-- TODO: Decide if you want to use conform or not
+--
+-- -- Autoformatting Setup
+-- require('conform').setup({
+-- formatters_by_ft = {
+-- lua = { 'stylua' },
+-- },
+-- })
+--
+-- vim.api.nvim_create_autocmd('BufWritePre', {
+-- callback = function(args)
+-- require('conform').format({
+-- bufnr = args.buf,
+-- lsp_fallback = true,
+-- quiet = true,
+-- })
+-- end,
+-- })
+
+vim.diagnostic.config({ virtual_text = false })