aboutsummaryrefslogtreecommitdiffstats
path: root/lua/lspconfig/server_configurations/elixirls.lua
diff options
context:
space:
mode:
authorPaul Gideon Dann <pgdann@gmail.com>2023-12-12 12:00:46 +0000
committerGitHub <noreply@github.com>2023-12-12 20:00:46 +0800
commitd29be376e64c23d6465ef3fb71aaf4bf4e8e0e68 (patch)
treee3c8645b0664be573e122bcda0b63478b85d70fc /lua/lspconfig/server_configurations/elixirls.lua
parentdocs: update server_configurations.md (diff)
downloadnvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.tar
nvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.tar.gz
nvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.tar.bz2
nvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.tar.lz
nvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.tar.xz
nvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.tar.zst
nvim-lspconfig-d29be376e64c23d6465ef3fb71aaf4bf4e8e0e68.zip
fix(elixirls): smarter detection of root_dir for umbrella apps (#2911)
Diffstat (limited to 'lua/lspconfig/server_configurations/elixirls.lua')
-rw-r--r--lua/lspconfig/server_configurations/elixirls.lua13
1 files changed, 9 insertions, 4 deletions
diff --git a/lua/lspconfig/server_configurations/elixirls.lua b/lua/lspconfig/server_configurations/elixirls.lua
index 62b8e168..3172f6a8 100644
--- a/lua/lspconfig/server_configurations/elixirls.lua
+++ b/lua/lspconfig/server_configurations/elixirls.lua
@@ -1,11 +1,14 @@
-local util = require 'lspconfig.util'
-
return {
default_config = {
filetypes = { 'elixir', 'eelixir', 'heex', 'surface' },
root_dir = function(fname)
- return util.root_pattern 'mix.exs'(fname) or util.find_git_ancestor(fname) or vim.loop.os_homedir()
+ local matches = vim.fs.find({ 'mix.exs' }, { upward = true, limit = 2, path = fname })
+ local child_or_root_path, maybe_umbrella_path = unpack(matches)
+ local root_dir = vim.fs.dirname(maybe_umbrella_path or child_or_root_path)
+
+ return root_dir
end,
+ single_file_support = true,
},
docs = {
description = [[
@@ -31,9 +34,11 @@ require'lspconfig'.elixirls.setup{
...
}
```
+
+'root_dir' is chosen like this: if two or more directories containing `mix.exs` were found when searching directories upward, the second one (higher up) is chosen, with the assumption that it is the root of an umbrella app. Otherwise the directory containing the single mix.exs that was found is chosen.
]],
default_config = {
- root_dir = [[util.find_git_ancestor(fname) or util.root_pattern 'mix.exs'(fname) or vim.loop.os_homedir()]],
+ root_dir = '{{see description above}}',
},
},
}