return { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, dependencies = { "hrsh7th/cmp-nvim-lsp", { "antosha417/nvim-lsp-file-operations", config = true }, }, config = function() local lspconfig = require("lspconfig") local cmp_nvim_lsp = require("cmp_nvim_lsp") local capabilities = cmp_nvim_lsp.default_capabilities() local opts = { noremap = true, silent = true } local on_attach = function(_, bufnr) opts.buffer = bufnr opts.desc = "Show line diagnostics" vim.keymap.set("n", "d", vim.diagnostic.open_float, opts) opts.desc = "Show diagnostics in Telescope" vim.keymaps.set("n", "d", "Telescope diagnostics bufnr=0", opts) opts.desc = "Show documentation for what is under cursor" vim.keymap.set("n", "", vim.lsp.buf.hover, opts) opts.desc = "[G]oto [D]efinition" vim.keymap.set("n", "gd", "Telescope lsp_definitions trim_text=true", opts) opts.desc = "[G]oto [D]eclaration" vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) opts.desc = "LSP [C]ode [A]ction" vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) --opts.desc = "[R]e-[N]ame" --vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) opts.desc = "[R]eload or start LSP" vim.keymap.set("n", "rl", ":LspRestart | :LspStart", opts) opts.desc = "Goto previous diagnostic" vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) opts.desc = "Goto next diagnostic" vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) end, lspconfig["sourcekit"].setup({ capabilities = capabilities, on_attach = on_attach, on_init = function(client) -- HACK: to fix some issues with LSP -- more details: https://github.com/neovim/neovim/issues/19237#issuecomment-2237037154 client.offset_encoding = "utf-8" end, }) -- nice icons local signs = { Error = " ", Warn = " ", Hint = "󰠠 ", Info = " " } for type, icon in pairs(signs) do local hl = "DiagnosticSign" .. type vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) end vim.keymap.set("n", "rn", vim.lsp.buf.rename, { desc = "[R]e-[N]ame" }) end, } -- -- -- Normal mode keymaps -- wk.add({ -- { "", vim.lsp.buf.hover, desc = "LSP hover info" }, -- { "ca", vim.lsp.buf.code_action, desc = "LSP [C]ode [A]ction" }, -- { "gi", vim.lsp.buf.implementation, desc = "[G]oto [I]mplementation" }, -- { "gr", vim.lsp.buf.references, desc = "List [R]eferences" }, -- { "gs", vim.lsp.buf.signature_help, desc = "[S]ignature help" }, -- }, { -- mode = "n", -- silent = true, -- noremap = true, -- }) -- -- -- Visual mode keymaps -- wk.add({ -- { "ca", vim.lsp.buf.code_action, desc = "LSP [C]ode [A]ction" }, -- }, { mode = "v", silent = true }) -- end, -- }) -- end, -- }, -- } -- }