btw i use nix
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' })