summaryrefslogtreecommitdiffstatshomepage
path: root/nvim/.config
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-07-30 13:41:06 -0500
committerToby Vincent <tobyv13@gmail.com>2022-07-30 13:41:06 -0500
commit75ac790e202924295c271c1f93acfad6ce636651 (patch)
tree9ba2a0f0c68866c5f444c1fae81ec9f2655fad07 /nvim/.config
parentcd949a791d7a5347d9b9e720d8b53218db2dbffe (diff)
feat(nvim): properly setup dap/dapui
Diffstat (limited to 'nvim/.config')
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins.lua8
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/dap.lua129
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua39
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils.lua8
4 files changed, 150 insertions, 34 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins.lua b/nvim/.config/nvim/lua/tobyvin/plugins.lua
index f19af6d..31a685b 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins.lua
@@ -199,7 +199,7 @@ M.plugins = function(use)
use({
"kevinhwang91/nvim-bqf",
requires = {
- "nvim-treesitter",
+ "nvim-treesitter/nvim-treesitter",
"junegunn/fzf",
},
ft = "qf",
@@ -218,7 +218,6 @@ M.plugins = function(use)
requires = {
"nvim-lua/plenary.nvim",
"BurntSushi/ripgrep",
- "nvim-telescope/telescope-dap.nvim",
"nvim-telescope/telescope-packer.nvim",
"nvim-telescope/telescope-github.nvim",
{ "nvim-telescope/telescope-fzf-native.nvim", run = "make" },
@@ -402,9 +401,10 @@ M.plugins = function(use)
use({
"mfussenegger/nvim-dap",
requires = {
- "theHamsta/nvim-dap-virtual-text",
"rcarriga/nvim-dap-ui",
- "Pocco81/DAPInstall.nvim",
+ { "theHamsta/nvim-dap-virtual-text", requires = "nvim-treesitter/nvim-treesitter" },
+ { "nvim-telescope/telescope-dap.nvim", requires = "nvim-telescope/telescope.nvim" },
+ "leoluz/nvim-dap-go",
},
config = function()
require("tobyvin.plugins.dap").setup()
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua b/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua
index 9b9a0c5..989d244 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua
@@ -1,4 +1,49 @@
-local M = {}
+local utils = require("tobyvin.utils")
+local M = {
+ dapui_win = nil,
+ dapui_tab = nil,
+}
+
+M.set_custom_breakpoint = function()
+ vim.ui.input({ prompt = "Condition: " }, function(condition)
+ vim.ui.input({ prompt = "Hit condition: " }, function(hit_condition)
+ vim.ui.input({ prompt = "Log point message: " }, function(log_message)
+ require("dap").set_breakpoint(condition, hit_condition, log_message)
+ end)
+ end)
+ end)
+end
+
+M.eval = function()
+ vim.ui.input({ prompt = "Expr: " }, function(input)
+ require("dapui").eval(input, {})
+ end)
+end
+
+M.open_in_tab = function()
+ if M.dapui_win and vim.api.nvim_win_is_valid(M.dapui_win) then
+ vim.api.nvim_set_current_win(M.dapui_win)
+ return
+ end
+
+ vim.cmd("tabedit %")
+ M.dapui_win = vim.fn.win_getid()
+ M.dapui_tab = vim.api.nvim_win_get_tabpage(M.dapui_win)
+
+ require("dapui").open({})
+end
+
+M.close_tab = function()
+ require("dapui").close({})
+
+ if M.dapui_tab and vim.api.nvim_tabpage_is_valid(M.dapui_tab) then
+ local tabnr = vim.api.nvim_tabpage_get_number(M.dapui_tab)
+ vim.cmd("tabclose " .. tabnr)
+ end
+
+ M.dapui_win = nil
+ M.dapui_tab = nil
+end
M.setup = function()
local status_ok, dap = pcall(require, "dap")
@@ -7,6 +52,7 @@ M.setup = function()
return
end
+ -- TODO: Break these configs out into seperate module, similar to my LSP configs
-- Debugpy
dap.adapters.python = {
type = "executable",
@@ -79,35 +125,62 @@ M.setup = function()
}
dap.configurations.c = dap.configurations.cpp
+
+ -- Disabled in favor of rust-tools
+ -- TODO: integrate rust-tools.nvim into this config
-- dap.configurations.rust = dap.configurations.cpp
- -- nnoremap <silent> <F5> <Cmd>lua require'dap'.continue()<CR>
- -- nnoremap <silent> <F10> <Cmd>lua require'dap'.step_over()<CR>
- -- nnoremap <silent> <F11> <Cmd>lua require'dap'.step_into()<CR>
- -- nnoremap <silent> <F12> <Cmd>lua require'dap'.step_out()<CR>
- -- nnoremap <silent> <Leader>b <Cmd>lua require'dap'.toggle_breakpoint()<CR>
- -- nnoremap <silent> <Leader>B <Cmd>lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))<CR>
- -- nnoremap <silent> <Leader>lp <Cmd>lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))<CR>
- -- nnoremap <silent> <Leader>dr <Cmd>lua require'dap'.repl.open()<CR>
- -- nnoremap <silent> <Leader>dl <Cmd>lua require'dap'.run_last()<CR>
-
- -- vim.api.nvim_create_user_command("Debug", dap.continue, { force = true })
- -- vim.api.nvim_create_user_command("BreakpointToggle", dap.toggle_breakpoint, { force = true })
- -- vim.api.nvim_create_user_command("BreakpointCond", function() dap.set_breakpoint(vim.fn.input("Breakpoint condition: ")) end, { force = true })
- -- vim.api.nvim_create_user_command("BreakpointLog", function() dap.set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end, { force = true })
- -- vim.api.nvim_create_user_command("REPL", dap.repl.open, { force = true })
-
- -- require("which-key").register({
- -- d = {
- -- name = "DAP",
- -- b = { , "Format" },
- -- F = { M.toggle_auto_format, "Toggle Auto-Format" },
- -- },
- -- }, { prefix = "<leader>", buffer = 0 })
-
- if not pcall(require, "telescope") then
- require("telescope").load_extension("dap")
- end
+ -- Language specific plugins
+ require("dap-go").setup()
+
+ -- Virtual text
+ require("nvim-dap-virtual-text").setup()
+
+ -- DAPUI
+ require("dapui").setup()
+
+ dap.listeners.before.event_terminated["close_repl"] = dap.repl.close
+ dap.listeners.before.event_exited["close_repl"] = dap.repl.close
+
+ -- Attach DAP UI to DAP events
+ dap.listeners.after.event_initialized["dapui_config"] = M.open_in_tab
+ dap.listeners.before.event_terminated["dapui_config"] = M.close_tab
+ dap.listeners.before.event_exited["dapui_config"] = M.close_tab
+ dap.listeners.before.disconnect["dapui_config"] = M.close_tab
+
+ -- Telescope
+ require("telescope").load_extension("dap")
+
+ -- Keymaps
+ vim.keymap.set("n", "<F5>", dap.continue, { desc = "Continue" })
+ vim.keymap.set("n", "<F10>", dap.step_over, { desc = "Step Over" })
+ vim.keymap.set("n", "<F11>", dap.step_into, { desc = "Step Into" })
+ vim.keymap.set("n", "<F12>", dap.step_out, { desc = "Step Out" })
+
+ local nmap = utils.create_map_group("n", "<leader>d", { desc = "Debug" })
+ nmap("d", dap.continue, { desc = "Continue" })
+ nmap("a", dap.step_over, { desc = "Step Over" })
+ nmap("i", dap.step_into, { desc = "Step Into" })
+ nmap("o", dap.step_out, { desc = "Step Out" })
+ nmap("q", dap.terminate, { desc = "Terminate" })
+
+ nmap("b", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
+ nmap("B", M.set_custom_breakpoint, { desc = "Custom Breakpoint" })
+
+ nmap("c", require("telescope").extensions.dap.commands, { desc = "Commands" })
+ nmap("C", require("telescope").extensions.dap.configurations, { desc = "Configurations" })
+ nmap("l", require("telescope").extensions.dap.list_breakpoints, { desc = "List Breakpoints" })
+ nmap("v", require("telescope").extensions.dap.variables, { desc = "Variables" })
+ nmap("f", require("telescope").extensions.dap.frames, { desc = "Frames" })
+
+ nmap("e", M.eval, { desc = "Eval" })
+
+ -- Signs
+ vim.fn.sign_define("DapBreakpoint", utils.debug_signs.breakpoint)
+ vim.fn.sign_define("DapBreakpointCondition", utils.debug_signs.condition)
+ vim.fn.sign_define("DapBreakpointRejected", utils.debug_signs.rejected)
+ vim.fn.sign_define("DapStopped", utils.debug_signs.stopped)
+ vim.fn.sign_define("DapLogPoint", utils.debug_signs.logpoint)
end
return M
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua b/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua
index 8f9277a..f0e2e0c 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua
@@ -1,12 +1,47 @@
+---@diagnostic disable: undefined-field
local M = {}
M.setup = function()
vim.opt.background = "dark"
- local colors = require("gruvbox.colors").setup()
- vim.g.gruvbox_colors = { bg_statusline = colors.line_cursor }
vim.g.gruvbox_flat_style = "hard"
vim.g.gruvbox_transparent = true
+
+ local colors = require("gruvbox.colors").setup({})
+ local theme = require("gruvbox.theme").setup({})
+
+ vim.g.gruvbox_colors = { bg_statusline = colors.bg_highlight }
+ vim.g.gruvbox_theme = {
+ debugBreakpoint = { bg = theme.base.SignColumn.bg, fg = "error" },
+ }
+
vim.cmd([[colorscheme gruvbox-flat]])
+
+ local ns_id = vim.api.nvim_create_namespace("gruvbox")
+
+ -- TODO: figure out why dap/dapui highlights are not being used
+ -- nvim-dap
+ vim.api.nvim_set_hl(ns_id, "DapBreakpoint", { link = "debugBreakpoint" })
+ vim.api.nvim_set_hl(ns_id, "DapStopped", { link = "debugPC" })
+
+ -- nvim-dap-ui
+ vim.api.nvim_set_hl(ns_id, "DapUIVariable", { link = "TSVariable" })
+ vim.api.nvim_set_hl(ns_id, "DapUIScope", { link = "TSNamespace" })
+ vim.api.nvim_set_hl(ns_id, "DapUIType", { link = "Type" })
+ vim.api.nvim_set_hl(ns_id, "DapUIModifiedValue", { link = "Keyword" })
+ vim.api.nvim_set_hl(ns_id, "DapUIDecoration", { link = "PreProc" })
+ vim.api.nvim_set_hl(ns_id, "DapUIThread", { link = "String" })
+ vim.api.nvim_set_hl(ns_id, "DapUIStoppedThread", { link = "Special" })
+ vim.api.nvim_set_hl(ns_id, "DapUIFrameName", { link = "Normal" })
+ vim.api.nvim_set_hl(ns_id, "DapUISource", { link = "TSKeyword" })
+ vim.api.nvim_set_hl(ns_id, "DapUILineNumber", { link = "TSOperator" })
+ vim.api.nvim_set_hl(ns_id, "DapUIFloatBorder", { link = "FloatBorder" })
+ vim.api.nvim_set_hl(ns_id, "DapUIWatchesEmpty", { link = "LspDiagnosticsError" })
+ vim.api.nvim_set_hl(ns_id, "DapUIWatchesValue", { link = "String" })
+ vim.api.nvim_set_hl(ns_id, "DapUIWatchesError", { link = "LspDiagnosticsError" })
+ vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsPath", { link = "Keyword" })
+ vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsInfo", { link = "LspDiagnosticsInfo" })
+ vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsCurrentLine", { link = "DapStopped" })
+ vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsLine", { link = "DapUILineNumber" })
end
return M
diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua
index d419064..081affb 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils.lua
@@ -88,6 +88,14 @@ M.diagnostic_signs = {
hint = { text = "", texthl = "DiagnosticSignHint" },
}
+M.debug_signs = {
+ breakpoint = { text = "", texthl = "debugBreakpoint" },
+ condition = { text = "ﳁ", texthl = "debugBreakpoint" },
+ rejected = { text = "", texthl = "debugBreakpoint" },
+ logpoint = { text = "", texthl = "debugBreakpoint" },
+ stopped = { text = "", texthl = "debugBreakpoint", linehl = "debugPC", numhl = "debugPC" },
+}
+
setmetatable(M.diagnostic_signs, {
__index = function()
return M.diagnostic_signs.info