aboutsummaryrefslogtreecommitdiffstats
path: root/lsp/dexter.lua
blob: 527559ea4c7c1cd5ce8ba2c2800fd20c781131f1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
---@brief
---
--- https://github.com/remoteoss/dexter
---
--- `dexter` is a fast, full-featured Elixir LSP optimized for large codebases.
---
--- `dexter` can be installed via Homebrew, mise, or asdf:
---
--- Via Homebrew:
--- ```sh
--- brew install remoteoss/tap/dexter
--- ```
---
--- Via mise:
--- ```sh
--- mise plugin add dexter https://github.com/remoteoss/dexter.git
--- mise install dexter
--- ```
---
--- Via asdf:
--- ```sh
--- asdf plugin add dexter https://github.com/remoteoss/dexter.git
--- asdf install dexter latest
--- ```
---
--- `dexter` works without compilation by parsing source files directly, providing:
--- - Fast indexing (cold index in ~11s on 57k-file codebases)
--- - Go-to-definition with alias and delegate resolution
--- - Find references across the codebase
--- - Hover documentation and autocompletion
--- - Rename functionality with automatic file renaming
--- - Format on save via persistent Elixir process
---
--- Configuration example:
--- ```lua
--- vim.lsp.config('dexter', {
---   init_options = {
---     followDelegates = true,  -- jump through defdelegate to the target function
---     -- stdlibPath = "",      -- override Elixir stdlib path (auto-detected)
---     -- debug = false,        -- verbose logging to stderr (view with :LspLog)
---   },
--- })
--- vim.lsp.enable('dexter')
--- ```
---

---@type vim.lsp.Config
return {
  cmd = { 'dexter', 'lsp' },
  filetypes = { 'elixir', 'eelixir', 'heex' },
  root_markers = { '.dexter/dexter.db', '.dexter.db', '.git', 'mix.exs' },
  init_options = {
    followDelegates = true,
  },
}