1-- TODO 2-- stdout 3-- args 4 5local dap = require('dap') 6dap.adapters.ocamlearlybird = { 7 type = 'executable', 8 command = 'ocamlearlybird', 9 args = { 'debug' }, 10 cwd = "${workspaceFolder}", 11} 12 13local pickers = require("telescope.pickers") 14local finders = require("telescope.finders") 15local conf = require("telescope.config").values 16local actions = require("telescope.actions") 17local action_state = require("telescope.actions.state") 18 19dap.configurations.ocaml = { 20 { 21 name = 'OCaml', 22 type = 'ocamlearlybird', 23 request = 'launch', 24 -- https://github.com/hackwaly/ocamlearlybird/issues/75 25 arguments = function() 26 return vim.split(vim.fn.input('Arguments: '), " ", { trimempty = true }) 27 end, 28 cwd = vim.fn.getcwd(), 29 program = function() 30 return coroutine.create(function(coro) 31 local opts = {} 32 pickers 33 .new(opts, { 34 prompt_title = "Path to executable", 35 finder = finders.new_oneshot_job({ "fd", "--hidden", "--no-ignore", "--type", "x" }, {}), 36 sorter = conf.generic_sorter(opts), 37 attach_mappings = function(buffer_number) 38 actions.select_default:replace(function() 39 actions.close(buffer_number) 40 coroutine.resume(coro, action_state.get_selected_entry()[1]) 41 end) 42 return true 43 end, 44 }) 45 :find() 46 end) 47 end, 48 }, 49} 50 51vim.keymap.set('n', '<leader>;c', function() require('dap').continue() end, { desc = 'DAP continue' }) 52vim.keymap.set('n', '<leader>;s', function() require('dap').step_over() end, { desc = 'DAP step over' }) 53vim.keymap.set('n', '<leader>;i', function() require('dap').step_into() end, { desc = 'DAP step into' }) 54vim.keymap.set('n', '<leader>;o', function() require('dap').step_out() end, { desc = 'DAP step out' }) 55vim.keymap.set('n', '<leader>;b', function() require('dap').toggle_breakpoint() end, { desc = 'DAP breakpoint' }) 56vim.keymap.set('n', '<leader>;m', 57 function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end, 58 { desc = 'DAP breakpoint message' }) 59vim.keymap.set('n', '<leader>;r', function() require('dap').repl.open() end, { desc = 'DAP repl' }) 60vim.keymap.set('n', '<leader>;l', function() require('dap').run_last() end, { desc = 'DAP run last' }) 61vim.keymap.set('n', '<leader>;f', function() 62 local widgets = require('dap.ui.widgets') 63 widgets.centered_float(widgets.frames) 64end, { desc = 'DAP frames' }) 65vim.keymap.set('n', '<leader>;S', function() 66 local widgets = require('dap.ui.widgets') 67 widgets.centered_float(widgets.scopes) 68end, { desc = 'DAP scopes' }) 69vim.keymap.set('n', '<leader>;t', function() require('dap').terminate() end, { desc = 'DAP terminate' })