Update project root detection for erlang_ls linter (#4619)

* Refactor erlang_ls linter tests

* Add Rebar3 _checkouts support for erlang_ls linter

* Add Erlang.mk support for erlang_ls linter
This commit is contained in:
Dmitri Vereshchagin 2024-02-22 05:14:56 +03:00 committed by GitHub
parent 8b8ddea6e5
commit 1c5b84f375
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 41 additions and 12 deletions

View File

@ -21,7 +21,14 @@ function! s:GetCommand(buffer) abort
endfunction
function! s:FindProjectRoot(buffer) abort
let l:markers = ['_build/', 'erlang_ls.config', 'rebar.lock']
let l:markers = [
\ '_checkouts/',
\ '_build/',
\ 'deps/',
\ 'erlang_ls.config',
\ 'rebar.lock',
\ 'erlang.mk',
\]
" This is a way to find Erlang/OTP root (the one that is managed
" by kerl or asdf). Useful if :ALEGoToDefinition takes us there.

View File

@ -1,8 +1,9 @@
Before:
let b:files = '../test-files/erlang'
call ale#assert#SetUpLinterTest('erlang', 'erlang_ls')
After:
unlet! b:root
call ale#assert#TearDownLinterTest()
Execute(The default command should be correct):
@ -30,19 +31,40 @@ Execute(Log directory should be configurable):
\ . ' --log-level=' . ale#Escape('info')
Execute(Project root should be detected using erlang_ls.config):
call ale#test#SetFilename(b:files . '/app_with_erlang_ls_config/src/app.erl')
AssertLSPProject ale#test#GetFilename(b:files . '/app_with_erlang_ls_config')
let b:root = '../test-files/erlang/app_with_erlang_ls_config'
call ale#test#SetFilename(b:files . '/app_with_erlang_ls_config/_build/default/lib/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:files . '/app_with_erlang_ls_config')
call ale#test#SetFilename(b:root . '/src/app.erl')
AssertLSPProject ale#test#GetFilename(b:root)
call ale#test#SetFilename(b:root . '/_build/default/lib/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:root)
call ale#test#SetFilename(b:root . '/deps/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:root)
Execute(Root of Rebar3 project should be detected):
call ale#test#SetFilename(b:files . '/app/src/app.erl')
AssertLSPProject ale#test#GetFilename(b:files . '/app')
let b:root = '../test-files/erlang/rebar3_app'
call ale#test#SetFilename(b:files . '/app/_build/default/lib/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:files . '/app')
call ale#test#SetFilename(b:root . '/src/app.erl')
AssertLSPProject ale#test#GetFilename(b:root)
call ale#test#SetFilename(b:root . '/_build/default/lib/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:root)
call ale#test#SetFilename(b:root . '/_checkouts/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:root)
Execute(Root of Erlang.mk project should be detected):
let b:root = '../test-files/erlang/erlang_mk_app'
call ale#test#SetFilename(b:root . '/src/app.erl')
AssertLSPProject ale#test#GetFilename(b:root)
call ale#test#SetFilename(b:root . '/deps/dep/src/dep.erl')
AssertLSPProject ale#test#GetFilename(b:root)
Execute(Root of kerl managed Erlang/OTP installation should be detected):
call ale#test#SetFilename(b:files . '/kerl_otp_root/lib/stdlib-4.1.1/array.erl')
AssertLSPProject ale#test#GetFilename(b:files . '/kerl_otp_root')
let b:root = '../test-files/erlang/kerl_otp_root'
call ale#test#SetFilename(b:root . '/lib/stdlib-4.1.1/array.erl')
AssertLSPProject ale#test#GetFilename(b:root)