summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugins/lspconfig.lua
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2025-06-16 22:53:16 -0400
committerJack Jamison <jackqjamison@gmail.com>2025-06-16 22:53:16 -0400
commite72bc10296c0d4c145abd69a2b00bc8aad0004bb (patch)
treeaf922e03fac17212db8da13937f4b2d562dd4037 /.config/nvim/lua/plugins/lspconfig.lua
parenta65f3404028bd734e5deb793aa6b765c638a34db (diff)
reorg
Diffstat (limited to '.config/nvim/lua/plugins/lspconfig.lua')
-rw-r--r--.config/nvim/lua/plugins/lspconfig.lua78
1 files changed, 78 insertions, 0 deletions
diff --git a/.config/nvim/lua/plugins/lspconfig.lua b/.config/nvim/lua/plugins/lspconfig.lua
new file mode 100644
index 0000000..2fcfa9b
--- /dev/null
+++ b/.config/nvim/lua/plugins/lspconfig.lua
@@ -0,0 +1,78 @@
+local on_attach = function(client, bufnr)
+ local keymap = function(mode, keys, func, opts)
+ opts.buffer = bufnr
+ vim.keymap.set(mode, keys, func, opts)
+ end
+
+ keymap('n', 'gd', vim.lsp.buf.definition, { desc = 'Go to definition' })
+ keymap('n', 'gD', vim.lsp.buf.declaration, { desc = 'Go to declaration' })
+ keymap('n', 'gI', vim.lsp.buf.implementation, { desc = 'Go to implementation' })
+ keymap('n', 'gy', vim.lsp.buf.type_definition, { desc = 'Go to type definition' })
+ keymap('n', 'gr', vim.lsp.buf.references, { desc = 'List references' })
+
+ keymap('n', '<leader>ds', vim.lsp.buf.document_symbol, { desc = 'List document symbols' })
+ keymap('n', '<leader>ws', vim.lsp.buf.workspace_symbol, { desc = 'List workspace symbols' })
+
+ keymap('n', 'K', vim.lsp.buf.hover, { desc = 'Show documentation' })
+ keymap('n', 'gK', vim.lsp.buf.signature_help, { desc = 'Show signature' })
+ keymap('i', '<C-s>', vim.lsp.buf.signature_help, { desc = 'Show signature' })
+
+ keymap('n', '<leader>rn', vim.lsp.buf.rename, { desc = 'Rename symbol' })
+ keymap('n', '<leader>ca', vim.lsp.buf.code_action, { desc = 'Code action' })
+
+ keymap('n', '<leader>wa', vim.lsp.buf.add_workspace_folder, { desc = 'Add workspace folder' })
+ keymap('n', '<leader>wr', vim.lsp.buf.remove_workspace_folder, { desc = 'Remove workspace folder' })
+ keymap('n', '<leader>cf', vim.cmd.ClangdSwitchSourceHeader, { desc = 'Switch source with header' })
+ keymap(
+ 'n',
+ '<leader>wl',
+ function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end,
+ { desc = 'List workspace folders' }
+ )
+end
+
+return {
+ 'neovim/nvim-lspconfig',
+ dependencies = {
+ "hrsh7th/cmp-nvim-lsp",
+ 'j-hui/fidget.nvim',
+ },
+ ft = { 'c', 'cpp', 'lua', 'zig' },
+ opts = {
+ servers = {
+ lua_ls = {
+ settings = {
+ Lua = {
+ workspace = { checkThirdParty = false },
+ telemetry = { enable = false },
+ },
+ },
+ },
+ clangd = {
+ settings = {},
+ },
+ zls = {
+ settings = {},
+ },
+ },
+ },
+ config = function(_, opts)
+ local lspconfig = require('lspconfig');
+ local capabilities = require('cmp_nvim_lsp').default_capabilities()
+
+ for name, conf in pairs(opts.servers) do
+ lspconfig[name].setup {
+ capabilities = capabilities,
+ settings = conf.settings,
+ on_attach = function(client, bufnr)
+ local _, err = pcall(on_attach, client, bufnr)
+ if err then
+ vim.notify('[on_attach] error: ' .. err, vim.log.levels.ERROR)
+ else
+ vim.notify('[on_attach] ' .. client.name .. ' attached to buffer ' .. bufnr, vim.log.levels.INFO)
+ end
+ end,
+ }
+ end
+ end
+}