diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index 802ff9f..9160f7b 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -1,15 +1,90 @@ +-- 1. Setup for all requested language servers: +-- - Ruby (ruby_lsp) +-- - TypeScript/JavaScript (ts_ls) +-- - HTML (html) +-- - CSS (cssls) +-- - Dart (dartls) +-- +-- 2. Standard LSP keybindings: +-- - gD: Go to declaration +-- - gd: Go to definition +-- - K: Hover documentation +-- - gi: Go to implementation +-- - : Signature help +-- - wa: Add workspace folder +-- - wr: Remove workspace folder +-- - wl: List workspace folders +-- - D: Type definition +-- - rn: Rename +-- - ca: Code actions +-- - gr: Find references +-- - f: Format code + return { - enabled = false, - "neovim/nvim-lspconfig", - opts = function(_, opts) - opts.servers = opts.servers or {} + { + "neovim/nvim-lspconfig", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + }, + config = function() + local lspconfig = require('lspconfig') - -- Ruby LSP - opts.servers.ruby_lsp = vim.tbl_deep_extend("force", opts.servers.ruby_lsp or {}, { - cmd = { vim.fn.expand("~/.asdf/shims/ruby"), "-S", "ruby-lsp" }, - }) + -- Global LSP settings + local capabilities = require('cmp_nvim_lsp').default_capabilities() - -- Dart LSP (Flutter) - opts.servers.dartls = {} - end, + -- LSP keymaps + local on_attach = function(client, bufnr) + local opts = { noremap = true, silent = true, buffer = bufnr } + + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, opts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, opts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) + vim.keymap.set('n', 'f', function() + vim.lsp.buf.format { async = true } + end, opts) + end + + -- Ruby LSP + lspconfig.ruby_lsp.setup({ + cmd = { vim.fn.expand("~/.asdf/shims/ruby"), "-S", "ruby-lsp" }, + capabilities = capabilities, + on_attach = on_attach, + }) + + -- TypeScript/JavaScript LSP + lspconfig.typescript.setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- HTML LSP + lspconfig.html.setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- CSS LSP + lspconfig.cssls.setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- Dart LSP (Flutter) + lspconfig.dartls.setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + end, + } }