.config/nvim/after/ftplugin/elixir.lua

changeset 1165
840f0fde07e2
child 1169
db64f7947671
equal deleted inserted replaced
1164:a8b6384c8738 1165:840f0fde07e2
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 }

mercurial