go.lua
1 --- Go: go.nvim + DAP (dlv, dap-ui, dap-go). Build once: :lua require("go.install").update_all_sync() 2 return { 3 specs = { 4 { src = 'https://github.com/ray-x/go.nvim', name = 'go.nvim' }, 5 { src = 'https://github.com/ray-x/guihua.lua', name = 'guihua.lua' }, 6 { src = 'https://github.com/mfussenegger/nvim-dap', name = 'nvim-dap' }, 7 { src = 'https://github.com/leoluz/nvim-dap-go', name = 'nvim-dap-go' }, 8 { src = 'https://github.com/rcarriga/nvim-dap-ui', name = 'nvim-dap-ui' }, 9 }, 10 config = function() 11 local go_ok, go = pcall(require, 'go') 12 if go_ok and type(go) == 'table' and go.setup then 13 go.setup({ 14 lsp_cfg = false, -- gopls managed by lsp/servers/go.lua, not go.nvim 15 lsp_codelens = true, 16 diagnostic = { 17 hdlr = true, 18 underline = true, 19 virtual_text = { spacing = 2, prefix = '' }, 20 signs = { '', '', '', '' }, 21 update_in_insert = false, 22 }, 23 lsp_inlay_hints = { enable = false }, 24 }) 25 end 26 27 local dap_ok, dap = pcall(require, 'dap') 28 local dapui_ok, dapui = pcall(require, 'dapui') 29 local dap_go_ok, dap_go = pcall(require, 'dap-go') 30 if not dap_ok or not dap then 31 return 32 end 33 34 if dap_go_ok and dap_go and dap_go.setup then 35 dap_go.setup() 36 end 37 if dapui_ok and dapui and dapui.setup then 38 ---@diagnostic disable: missing-fields 39 dapui.setup({}) 40 end 41 42 dap.adapters.go = { 43 type = 'server', 44 port = '${port}', 45 executable = { 46 command = 'dlv', 47 args = { 'dap', '-l', '127.0.0.1:${port}' }, 48 }, 49 } 50 51 if dapui and dapui.open and dapui.close then 52 local open, close = function() 53 dapui.open({}) 54 end, function() 55 dapui.close({}) 56 end 57 dap.listeners.before.attach['dapui_config'] = open 58 dap.listeners.before.launch['dapui_config'] = open 59 dap.listeners.after.event_initialized['dapui_config'] = open 60 dap.listeners.before.event_terminated['dapui_config'] = close 61 dap.listeners.before.event_exited['dapui_config'] = close 62 end 63 64 vim.keymap.set('n', '<leader>du', function() 65 pcall(require('dapui').toggle, {}) 66 end, { desc = '[d]ap [u]i' }) 67 vim.keymap.set('n', '<leader>de', function() 68 pcall(require('dapui').eval) 69 end, { desc = '[d]ap [e]val' }) 70 vim.keymap.set('n', '<leader>db', function() 71 require('dap').toggle_breakpoint() 72 end, { desc = 'toggle [d]ebug [b]reakpoint' }) 73 vim.keymap.set('n', '<leader>dB', function() 74 require('dap').set_breakpoint(vim.fn.input('Breakpoint condition: ')) 75 end, { desc = '[d]ebug [B]reakpoint' }) 76 vim.keymap.set('n', '<leader>dc', function() 77 require('dap').continue() 78 end, { desc = '[d]ebug [c]ontinue' }) 79 vim.keymap.set('n', '<leader>di', function() 80 require('dap').step_into() 81 end, { desc = '[d]ebug [i]nto' }) 82 vim.keymap.set('n', '<leader>do', function() 83 require('dap').step_over() 84 end, { desc = '[d]ebug step [o]ver' }) 85 vim.keymap.set('n', '<leader>dO', function() 86 require('dap').step_out() 87 end, { desc = '[d]ebug step [O]ut' }) 88 vim.keymap.set('n', '<leader>dh', function() 89 require('dap').step_back() 90 end, { desc = '[d]ebug step back [h]' }) 91 vim.keymap.set('n', '<leader>dx', function() 92 require('dap').restart() 93 end, { desc = '[d]ebug restart [x]' }) 94 vim.keymap.set('n', '<leader>dC', function() 95 require('dap').run_to_cursor() 96 end, { desc = '[d]ebug [C]ursor' }) 97 vim.keymap.set('n', '<leader>dg', function() 98 require('dap').goto_() 99 end, { desc = '[d]ebug [g]o to line' }) 100 vim.keymap.set('n', '<leader>dj', function() 101 require('dap').down() 102 end, { desc = '[d]ebug [j]ump down' }) 103 vim.keymap.set('n', '<leader>dk', function() 104 require('dap').up() 105 end, { desc = '[d]ebug [k]ump up' }) 106 vim.keymap.set('n', '<leader>dl', function() 107 require('dap').run_last() 108 end, { desc = '[d]ebug [l]ast' }) 109 vim.keymap.set('n', '<leader>dp', function() 110 require('dap').pause() 111 end, { desc = '[d]ebug [p]ause' }) 112 vim.keymap.set('n', '<leader>dr', function() 113 require('dap').repl.toggle() 114 end, { desc = '[d]ebug [r]epl' }) 115 vim.keymap.set('n', '<leader>dR', function() 116 require('dap').clear_breakpoints() 117 end, { desc = '[d]ebug [R]emove breakpoints' }) 118 vim.keymap.set('n', '<leader>ds', function() 119 require('dap').session() 120 end, { desc = '[d]ebug [s]ession' }) 121 vim.keymap.set('n', '<leader>dt', function() 122 require('dap').terminate() 123 end, { desc = '[d]ebug [t]erminate' }) 124 vim.keymap.set('n', '<leader>dw', function() 125 pcall(require('dap.ui.widgets').hover) 126 end, { desc = '[d]ebug [w]idgets' }) 127 end, 128 }