diff options
author | Jon Parise <jon@indelible.org> | 2018-11-01 13:35:18 -0700 |
---|---|---|
committer | Jon Parise <jon@indelible.org> | 2018-11-04 06:40:25 -0800 |
commit | b25794e81b79d4ce1a6f2d9d0fbcc6876ecaa124 (patch) | |
tree | c181230a071ac6d52e1161090eb223e47255c31e /autoload | |
parent | acdc99b94daf0f14a8a71d1de5656e9f612a0139 (diff) | |
download | ale-b25794e81b79d4ce1a6f2d9d0fbcc6876ecaa124.zip |
elixir-ls now recognizes umbrella projects
Previously, elixir-ls would treat each sub-project within an umbrella as
standalone, which isn't desirable from a language server perspective.
Added ale#handlers#elixir#FindMixUmbrellaRoot, which locates the current
project's root and then continues searching upwards for a potential
umbrella project root. This literally looks just two levels up to keep
things simple while keeping in line with Elixir project conventions.
Use this new function to determine elixir-ls's LSP project root.
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/ale/handlers/elixir.vim | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/autoload/ale/handlers/elixir.vim b/autoload/ale/handlers/elixir.vim index 91b75aac..2fddf8e7 100644 --- a/autoload/ale/handlers/elixir.vim +++ b/autoload/ale/handlers/elixir.vim @@ -1,13 +1,28 @@ " Author: Matteo Centenaro (bugant) - https://github.com/bugant -" -" Description: find the root directory for an elixir project that uses mix +" Author: Jon Parise <jon@indelible.org> +" Description: Functions for working with Elixir projects +" Find the root directory for an elixir project that uses mix. function! ale#handlers#elixir#FindMixProjectRoot(buffer) abort let l:mix_file = ale#path#FindNearestFile(a:buffer, 'mix.exs') if !empty(l:mix_file) - return fnamemodify(l:mix_file, ':p:h') + return fnamemodify(l:mix_file, ':p:h') endif return '.' endfunction + +" Similar to ale#handlers#elixir#FindMixProjectRoot but also continue the +" search upward for a potential umbrella project root. If an umbrella root +" does not exist, the initial project root will be returned. +function! ale#handlers#elixir#FindMixUmbrellaRoot(buffer) abort + let l:app_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) + let l:umbrella_root = fnamemodify(l:app_root, ':h:h') + + if filereadable(l:umbrella_root . '/mix.exs') + return l:umbrella_root + endif + + return l:app_root +endfunction |