From 0bec36b3904b192718c73c121485131b7504f008 Mon Sep 17 00:00:00 2001 From: Martin Larsson Date: Wed, 10 Apr 2024 22:22:51 +0200 Subject: [PATCH] Add DAP support, and some refactoring, nothing fancy for the DAPs yet, but good enough to use. --- nvim/lua/plugs/mason_lsp.lua | 135 +++++++++++++++++++++++++---------- 1 file changed, 99 insertions(+), 36 deletions(-) diff --git a/nvim/lua/plugs/mason_lsp.lua b/nvim/lua/plugs/mason_lsp.lua index 6975af8..a4fa535 100644 --- a/nvim/lua/plugs/mason_lsp.lua +++ b/nvim/lua/plugs/mason_lsp.lua @@ -1,10 +1,101 @@ +local function setup_lsp(server_names) + local capabilities = require("cmp_nvim_lsp").default_capabilities() + local lspconfig = require("lspconfig") + for _, server_name in ipairs(server_names) do + local server = lspconfig[server_name] + if server then + local server_table = require("language_servers/" .. server_name) + server_table.capabilities = capabilities + server_table.on_attach = function(client, bufnr) + vim.lsp.inlay_hint.enable(bufnr, true) + + if client.server_capabilities.documentFormattingProvider then + vim.api.nvim_buf_create_user_command(bufnr, "Format", vim.lsp.buf.format, { nargs = 0 }) + vim.api.nvim_create_autocmd("BufWritePre", { + buffer = bufnr, + callback = function() + vim.lsp.buf.format() + end, + }) + end + end + + server.setup(server_table) + + -- Run the post_setup function if it exists + if server_table.post_setup then + server_table.post_setup() + end + else + error("LSP server not found: " .. server_name) + end + end +end + +local function setup_dap() + local dap = require("dap") + local dapui = require("dapui") + dapui.setup() + + local dap_signs = { + { "DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" } }, + } + + for _, sign in ipairs(dap_signs) do + vim.fn.sign_define(sign[1], sign[2]) + end + + dap.listeners.after.event_initialized["dapui_config"] = function() + dapui.open() + end + dap.listeners.before.event_terminated["dapui_config"] = function() + dapui.close() + end + dap.listeners.before.event_exited["dapui_config"] = function() + dapui.close() + end + + require("mason-nvim-dap").setup({ + handlers = {} + }) + require("nvim-dap-repl-highlights").setup() + + require("utils").add_keymaps({ + n = { + ["dr"] = { cmd = ":lua require(\"dap\").continue()" }, + ["db"] = { cmd = ":lua require(\"dap\").toggle_breakpoint()" }, + ["ds"] = { + cmd = function() + dap.disconnect({ terminateDebuggee = true }) + dap.close() + dapui.close() + end + }, + [""] = { cmd = ":lua require(\"dap\").step_over()" }, + [""] = { cmd = ":lua require(\"dap\").step_into()" }, + [""] = { cmd = ":lua require(\"dap\").step_out()" }, + } + }) +end + return { "williamboman/mason.nvim", dependencies = { - "williamboman/mason-lspconfig.nvim", - "neovim/nvim-lspconfig", + -- Mason plugins "WhoIsSethDaniel/mason-tool-installer.nvim", "RubixDev/mason-update-all", + + -- LSP config + "neovim/nvim-lspconfig", + "williamboman/mason-lspconfig.nvim", + + -- DAP + "folke/neodev.nvim", + "jay-babu/mason-nvim-dap.nvim", + "rcarriga/nvim-dap-ui", + "mfussenegger/nvim-dap", + "nvim-neotest/nvim-nio", + "LiadOz/nvim-dap-repl-highlights" }, config = function() -- Find all files in lua/language_servers and require them @@ -25,7 +116,8 @@ return { local mason_installs = vim.list_extend({ "clang-format", "cmakelang", - -- "luaformater", + "codelldb", + "netcoredbg", }, server_names) require("mason").setup() @@ -33,39 +125,10 @@ return { require("mason-tool-installer").setup({ ensure_installed = mason_installs, }) + + setup_lsp(server_names) + setup_dap() + require("mason-update-all").setup() - - -- Iterate each server and setup - local capabilities = require("cmp_nvim_lsp").default_capabilities() - local lspconfig = require("lspconfig") - for _, server_name in ipairs(server_names) do - local server = lspconfig[server_name] - if server then - local server_table = require("language_servers/" .. server_name) - server_table.capabilities = capabilities - server_table.on_attach = function(client, bufnr) - vim.lsp.inlay_hint.enable(bufnr, true) - - if client.server_capabilities.documentFormattingProvider then - vim.api.nvim_buf_create_user_command(bufnr, "Format", vim.lsp.buf.format, { nargs = 0 }) - vim.api.nvim_create_autocmd("BufWritePre", { - buffer = bufnr, - callback = function() - vim.lsp.buf.format() - end, - }) - end - end - - server.setup(server_table) - - -- Run the post_setup function if it exists - if server_table.post_setup then - server_table.post_setup() - end - else - error("LSP server not found: " .. server_name) - end - end end, }