mirror of
https://github.com/dense-analysis/ale
synced 2025-02-17 04:36:56 +00:00
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.
29 lines
999 B
VimL
29 lines
999 B
VimL
" Author: Matteo Centenaro (bugant) - https://github.com/bugant
|
|
" 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')
|
|
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
|