diff --git a/init.lua b/init.lua index aa1958a..7e74d03 100644 --- a/init.lua +++ b/init.lua @@ -388,9 +388,24 @@ require('lazy').setup { manual_install = true, filetypes = { 'c', 'cpp' }, root_dir = lspconfig.util.root_pattern("src"), + cmd = { + "clangd", + "--pch-storage=memory", + "--completion-style=detailed", + "--header-insertion=never", + "--background-index", + "--all-scopes-completion", + "--header-insertion-decorators", + "--function-arg-placeholders", + "--inlay-hints", + "--pretty", + -- TODO: remove or adjust + -- "-j=4", + }, }, gopls = {}, - pylsp = {}, + pylsp = { + }, rust_analyzer = {}, volar = {}, ts_ls = { diff --git a/lua/custom/plugins/dap.lua b/lua/custom/plugins/dap.lua new file mode 100644 index 0000000..160b867 --- /dev/null +++ b/lua/custom/plugins/dap.lua @@ -0,0 +1,91 @@ +return { + { + "mfussenegger/nvim-dap", + dependencies = { + "rcarriga/nvim-dap-ui", + "nvim-neotest/nvim-nio", + "theHamsta/nvim-dap-virtual-text", + "williamboman/mason.nvim", + }, + config = function() + local dap = require("dap") + local ui = require("dapui") + + ui.setup() + + local gdb = vim.fn.exepath("gdb") + if gdb ~= "" then + dap.adapters.gdb = { + type = "executable", + command = "gdb", + args = { "--interpreter=dap", "--eval-command", "set print pretty on" } + } + + dap.configurations.c = { + { + name = "Launch", + type = "gdb", + request = "launch", + program = vim.fn.getcwd() .. '/target/main.o', + -- program = function() + -- return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + -- end, + cwd = "${workspaceFolder}", + stopAtBeginningOfMainSubprogram = true, + debugmode = "file", + }, + -- { + -- name = "Select and attach to process", + -- type = "gdb", + -- request = "attach", + -- program = function() + -- return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + -- end, + -- pid = function() + -- local name = vim.fn.input('Executable name (filter): ') + -- return require("dap.utils").pick_process({ filter = name }) + -- end, + -- cwd = '${workspaceFolder}' + -- }, + -- { + -- name = 'Attach to gdbserver :1234', + -- type = 'gdb', + -- request = 'attach', + -- target = 'localhost:1234', + -- program = function() + -- return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + -- end, + -- cwd = '${workspaceFolder}' + -- }, + } + end + + -- Evaluate expression under cursor + vim.keymap.set("n", "?", function() + require("dapui").eval(nil, { enter = true }) + end) + + -- Keymaps + vim.keymap.set("n", "b", dap.toggle_breakpoint) + vim.keymap.set("n", "", dap.restart) + vim.keymap.set("n", "", dap.step_out) + vim.keymap.set("n", "", dap.continue) + vim.keymap.set("n", "", dap.step_into) + vim.keymap.set("n", "", dap.step_over) + + -- Open and close DAP UI + dap.listeners.before.attach.dapui_config = function() + ui.open() + end + dap.listeners.before.launch.dapui_config = function() + ui.open() + end + dap.listeners.before.event_terminated.dapui_config = function() + ui.close() + end + dap.listeners.before.event_exited.dapui_config = function() + ui.close() + end + end + } +} diff --git a/lua/custom/plugins/debug.lua b/lua/custom/plugins/debug.lua new file mode 100644 index 0000000..9abed2a --- /dev/null +++ b/lua/custom/plugins/debug.lua @@ -0,0 +1,88 @@ +-- debug.lua +-- +-- Shows how to use the DAP plugin to debug your code. +-- +-- Primarily focused on configuring the debugger for Go, but can +-- be extended to other languages as well. That's why it's called +-- kickstart.nvim and not kitchen-sink.nvim ;) + +return { + -- -- NOTE: Yes, you can install new plugins here! + -- 'mfussenegger/nvim-dap', + -- -- NOTE: And you can specify dependencies as well + -- dependencies = { + -- -- Creates a beautiful debugger UI + -- 'nvim-neotest/nvim-nio', + -- 'rcarriga/nvim-dap-ui', + -- + -- -- Installs the debug adapters for you + -- 'williamboman/mason.nvim', + -- 'jay-babu/mason-nvim-dap.nvim', + -- + -- -- Add your own debuggers here + -- 'leoluz/nvim-dap-go', + -- }, + -- config = function() + -- local dap = require 'dap' + -- local dapui = require 'dapui' + -- + -- require('mason-nvim-dap').setup { + -- -- Makes a best effort to setup the various debuggers with + -- -- reasonable debug configurations + -- automatic_setup = true, + -- + -- -- You can provide additional configuration to the handlers, + -- -- see mason-nvim-dap README for more information + -- handlers = {}, + -- + -- -- You'll need to check that you have the required things installed + -- -- online, please don't ask me how to install them :) + -- ensure_installed = { + -- -- Update this to ensure that you have the debuggers for the langs you want + -- 'delve', + -- }, + -- } + -- + -- -- Basic debugging keymaps, feel free to change to your liking! + -- vim.keymap.set('n', '', dap.continue, { desc = 'Debug: Start/Continue' }) + -- vim.keymap.set('n', '', dap.step_into, { desc = 'Debug: Step Into' }) + -- vim.keymap.set('n', '', dap.step_over, { desc = 'Debug: Step Over' }) + -- vim.keymap.set('n', '', dap.step_out, { desc = 'Debug: Step Out' }) + -- vim.keymap.set('n', 'b', dap.toggle_breakpoint, { desc = 'Debug: Toggle Breakpoint' }) + -- vim.keymap.set('n', 'B', function() + -- dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ') + -- end, { desc = 'Debug: Set Breakpoint' }) + -- + -- -- Dap UI setup + -- -- For more information, see |:help nvim-dap-ui| + -- dapui.setup { + -- -- Set icons to characters that are more likely to work in every terminal. + -- -- Feel free to remove or use ones that you like more! :) + -- -- Don't feel like these are good choices. + -- icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, + -- controls = { + -- icons = { + -- pause = '⏸', + -- play = '▶', + -- step_into = '⏎', + -- step_over = '⏭', + -- step_out = '⏮', + -- step_back = 'b', + -- run_last = '▶▶', + -- terminate = '⏹', + -- disconnect = '⏏', + -- }, + -- }, + -- } + -- + -- -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. + -- vim.keymap.set('n', '', dapui.toggle, { desc = 'Debug: See last session result.' }) + -- + -- dap.listeners.after.event_initialized['dapui_config'] = dapui.open + -- dap.listeners.before.event_terminated['dapui_config'] = dapui.close + -- dap.listeners.before.event_exited['dapui_config'] = dapui.close + -- + -- -- Install golang specific config + -- require('dap-go').setup() + -- end, +}