From 1c5b84f375a5d0ea4eb11d64b333119245ec5605 Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Thu, 22 Feb 2024 05:14:56 +0300 Subject: 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 --- ale_linters/erlang/erlang_ls.vim | 9 ++++- test/linter/test_erlang_erlang_ls.vader | 44 ++++++++++++++++------ .../erlang/app/_build/default/lib/dep/rebar.lock | 0 .../erlang/app/_build/default/lib/dep/src/dep.erl | 0 test/test-files/erlang/app/rebar.lock | 0 test/test-files/erlang/app/src/app.erl | 0 .../_build/default/lib/dep/src/dep.erl | 0 .../deps/dep/erlang_ls.config | 0 .../erlang/app_with_erlang_ls_config/src/app.erl | 0 .../erlang/erlang_mk_app/deps/dep/erlang.mk | 0 test/test-files/erlang/erlang_mk_app/erlang.mk | 0 .../kerl_otp_root/lib/stdlib-4.1.1/src/array.erl | 0 .../rebar3_app/_build/default/lib/dep/rebar.lock | 0 .../rebar3_app/_checkouts/dep/_build/.gitkeep | 0 .../erlang/rebar3_app/_checkouts/dep/rebar.lock | 0 test/test-files/erlang/rebar3_app/rebar.lock | 0 16 files changed, 41 insertions(+), 12 deletions(-) delete mode 100644 test/test-files/erlang/app/_build/default/lib/dep/rebar.lock delete mode 100644 test/test-files/erlang/app/_build/default/lib/dep/src/dep.erl delete mode 100644 test/test-files/erlang/app/rebar.lock delete mode 100644 test/test-files/erlang/app/src/app.erl delete mode 100644 test/test-files/erlang/app_with_erlang_ls_config/_build/default/lib/dep/src/dep.erl create mode 100644 test/test-files/erlang/app_with_erlang_ls_config/deps/dep/erlang_ls.config delete mode 100644 test/test-files/erlang/app_with_erlang_ls_config/src/app.erl create mode 100644 test/test-files/erlang/erlang_mk_app/deps/dep/erlang.mk create mode 100644 test/test-files/erlang/erlang_mk_app/erlang.mk delete mode 100644 test/test-files/erlang/kerl_otp_root/lib/stdlib-4.1.1/src/array.erl create mode 100644 test/test-files/erlang/rebar3_app/_build/default/lib/dep/rebar.lock create mode 100644 test/test-files/erlang/rebar3_app/_checkouts/dep/_build/.gitkeep create mode 100644 test/test-files/erlang/rebar3_app/_checkouts/dep/rebar.lock create mode 100644 test/test-files/erlang/rebar3_app/rebar.lock diff --git a/ale_linters/erlang/erlang_ls.vim b/ale_linters/erlang/erlang_ls.vim index b747e454..0f070459 100644 --- a/ale_linters/erlang/erlang_ls.vim +++ b/ale_linters/erlang/erlang_ls.vim @@ -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. diff --git a/test/linter/test_erlang_erlang_ls.vader b/test/linter/test_erlang_erlang_ls.vader index 3870b5c4..2a3d7a70 100644 --- a/test/linter/test_erlang_erlang_ls.vader +++ b/test/linter/test_erlang_erlang_ls.vader @@ -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: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: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 . '/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: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:files . '/app/_build/default/lib/dep/src/dep.erl') - AssertLSPProject ale#test#GetFilename(b:files . '/app') + 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) diff --git a/test/test-files/erlang/app/_build/default/lib/dep/rebar.lock b/test/test-files/erlang/app/_build/default/lib/dep/rebar.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/app/_build/default/lib/dep/src/dep.erl b/test/test-files/erlang/app/_build/default/lib/dep/src/dep.erl deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/app/rebar.lock b/test/test-files/erlang/app/rebar.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/app/src/app.erl b/test/test-files/erlang/app/src/app.erl deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/app_with_erlang_ls_config/_build/default/lib/dep/src/dep.erl b/test/test-files/erlang/app_with_erlang_ls_config/_build/default/lib/dep/src/dep.erl deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/app_with_erlang_ls_config/deps/dep/erlang_ls.config b/test/test-files/erlang/app_with_erlang_ls_config/deps/dep/erlang_ls.config new file mode 100644 index 00000000..e69de29b diff --git a/test/test-files/erlang/app_with_erlang_ls_config/src/app.erl b/test/test-files/erlang/app_with_erlang_ls_config/src/app.erl deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/erlang_mk_app/deps/dep/erlang.mk b/test/test-files/erlang/erlang_mk_app/deps/dep/erlang.mk new file mode 100644 index 00000000..e69de29b diff --git a/test/test-files/erlang/erlang_mk_app/erlang.mk b/test/test-files/erlang/erlang_mk_app/erlang.mk new file mode 100644 index 00000000..e69de29b diff --git a/test/test-files/erlang/kerl_otp_root/lib/stdlib-4.1.1/src/array.erl b/test/test-files/erlang/kerl_otp_root/lib/stdlib-4.1.1/src/array.erl deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test-files/erlang/rebar3_app/_build/default/lib/dep/rebar.lock b/test/test-files/erlang/rebar3_app/_build/default/lib/dep/rebar.lock new file mode 100644 index 00000000..e69de29b diff --git a/test/test-files/erlang/rebar3_app/_checkouts/dep/_build/.gitkeep b/test/test-files/erlang/rebar3_app/_checkouts/dep/_build/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/test/test-files/erlang/rebar3_app/_checkouts/dep/rebar.lock b/test/test-files/erlang/rebar3_app/_checkouts/dep/rebar.lock new file mode 100644 index 00000000..e69de29b diff --git a/test/test-files/erlang/rebar3_app/rebar.lock b/test/test-files/erlang/rebar3_app/rebar.lock new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3