Wed, 15 May 2024 22:44:16 -0500
set up nvim-dap etc
1165 | 1 | -- elixir-tools installs elixir-ls in directories by version and otp version in |
2 | -- order to match up the right version with your app. it doesn't expose what | |
3 | -- path is in use except for how it launches elixir-ls, so we can scrape it out | |
4 | -- of there. it's not clear to me how nvim-dap would handle an adapter's | |
5 | -- definition changing, so i wouldn't expect this to work well with more than | |
6 | -- one version in the same nvim session. | |
7 | ||
8 | local function find_elixir_lsp_dap_cmd(bufnr) | |
9 | local elixir_lsp = vim.lsp.get_active_clients({ | |
10 | idname = "ElixirLS", | |
11 | bufnr = bufnr or vim.api.nvim_get_current_buf(), | |
12 | })[1] | |
13 | ||
14 | if elixir_lsp then | |
15 | local elixir_lsp_cmd = elixir_lsp.config.cmd[1] | |
16 | local dap_cmd = elixir_lsp_cmd:gsub("language_server.", "debug_adapter.") | |
17 | ||
18 | return dap_cmd | |
19 | end | |
20 | end | |
21 | ||
22 | local dap = require("dap") | |
23 | ||
24 | dap.adapters.mix_task = function(callback, _) | |
25 | local dap_cmd = find_elixir_lsp_dap_cmd() | |
26 | ||
27 | if dap_cmd then | |
28 | callback({ | |
29 | type = 'executable', | |
30 | command = find_elixir_lsp_dap_cmd(), | |
31 | args = {}, | |
32 | }) | |
33 | end | |
34 | end | |
35 | ||
36 | dap.configurations.elixir = { | |
37 | { | |
38 | type = "mix_task", | |
39 | name = "mix test", | |
40 | task = 'test', | |
41 | taskArgs = { "--trace" }, | |
42 | request = "launch", | |
43 | startApps = true, | |
44 | projectDir = "${workspaceFolder}", | |
45 | requireFiles = { | |
46 | "test/**/test_helper.exs", | |
47 | "test/**/*_test.exs" | |
48 | } | |
49 | }, | |
50 | { | |
51 | type = "mix_task", | |
52 | name = "phx.server", | |
53 | request = "launch", | |
54 | task = "phx.server", | |
55 | projectDir = "${workspaceFolder}" | |
56 | }, | |
57 | } |