diff options
-rw-r--r-- | ale_linters/elm/make.vim | 70 | ||||
-rw-r--r-- | test/command_callback/test_elm_make_command_callback.vader | 44 | ||||
-rw-r--r-- | test/elm-test-files/newapp-notests/elm.json (renamed from test/elm-test-files/app/filetest.elm) | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp-notests/node_modules/.bin/elm (renamed from test/elm-test-files/app/node_modules/.bin/elm) | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp-notests/tests/TestMain.elm | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp/elm.json | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp/node_modules/.bin/elm | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp/node_modules/.bin/elm-test | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp/src/Main.elm | 0 | ||||
-rw-r--r-- | test/elm-test-files/newapp/tests/TestSuite.elm | 0 | ||||
-rw-r--r-- | test/elm-test-files/oldapp/elm-package.json | 0 | ||||
-rw-r--r-- | test/elm-test-files/oldapp/node_modules/.bin/elm | 0 | ||||
-rw-r--r-- | test/elm-test-files/oldapp/node_modules/.bin/elm-test | 0 | ||||
-rw-r--r-- | test/elm-test-files/oldapp/src/Main.elm | 0 | ||||
-rw-r--r-- | test/elm-test-files/oldapp/tests/TestSuite.elm | 0 |
15 files changed, 100 insertions, 14 deletions
diff --git a/ale_linters/elm/make.vim b/ale_linters/elm/make.vim index ddea983f..76622028 100644 --- a/ale_linters/elm/make.vim +++ b/ale_linters/elm/make.vim @@ -137,9 +137,7 @@ function! ale_linters#elm#make#ParseMessageItem(item) abort endif endfunction -" Return the command to execute the linter in the projects directory. -" If it doesn't, then this will fail when imports are needed. -function! ale_linters#elm#make#GetCommand(buffer) abort +function! ale_linters#elm#make#GetPackageFile(buffer) abort let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json') if empty(l:elm_json) @@ -147,10 +145,55 @@ function! ale_linters#elm#make#GetCommand(buffer) abort let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm-package.json') endif + return l:elm_json +endfunction + +function! ale_linters#elm#make#IsVersionGte19(buffer) abort + let l:elm_json = ale_linters#elm#make#GetPackageFile(a:buffer) + + if l:elm_json =~# '-package' + return 0 + else + return 1 + endif +endfunction + +function! ale_linters#elm#make#GetRootDir(buffer) abort + let l:elm_json = ale_linters#elm#make#GetPackageFile(a:buffer) + if empty(l:elm_json) + return '' + else + return fnamemodify(l:elm_json, ':p:h') + endif +endfunction + +function! ale_linters#elm#make#IsTest(buffer) abort + let l:root_dir = ale_linters#elm#make#GetRootDir(a:buffer) + + if empty(l:root_dir) + return 0 + endif + + let l:tests_dir = join([l:root_dir, 'tests', ''], has('win32') ? '\' : '/') + + let l:buffer_path = fnamemodify(bufname(a:buffer), ':p') + + if stridx(l:buffer_path, l:tests_dir) == 0 + return 1 + else + return 0 + endif +endfunction + +" Return the command to execute the linter in the projects directory. +" If it doesn't, then this will fail when imports are needed. +function! ale_linters#elm#make#GetCommand(buffer) abort + let l:root_dir = ale_linters#elm#make#GetRootDir(a:buffer) + + if empty(l:root_dir) let l:dir_set_cmd = '' else - let l:root_dir = fnamemodify(l:elm_json, ':p:h') let l:dir_set_cmd = 'cd ' . ale#Escape(l:root_dir) . ' && ' endif @@ -161,11 +204,24 @@ function! ale_linters#elm#make#GetCommand(buffer) abort return l:dir_set_cmd . '%e make --report=json --output=/dev/null %t' endfunction +function! ale_linters#elm#make#GetExecutable(buffer) abort + let l:is_test = ale_linters#elm#make#IsTest(a:buffer) + let l:is_v19 = ale_linters#elm#make#IsVersionGte19(a:buffer) + + if l:is_test && l:is_v19 + return ale#node#FindExecutable( +\ a:buffer, +\ 'elm_make', +\ ['node_modules/.bin/elm-test', 'node_modules/.bin/elm'] +\ ) + else + return ale#node#FindExecutable(a:buffer, 'elm_make', ['node_modules/.bin/elm']) + endif +endfunction + call ale#linter#Define('elm', { \ 'name': 'make', -\ 'executable_callback': ale#node#FindExecutableFunc('elm_make', [ -\ 'node_modules/.bin/elm', -\ ]), +\ 'executable_callback': 'ale_linters#elm#make#GetExecutable', \ 'output_stream': 'both', \ 'command_callback': 'ale_linters#elm#make#GetCommand', \ 'callback': 'ale_linters#elm#make#Handle' diff --git a/test/command_callback/test_elm_make_command_callback.vader b/test/command_callback/test_elm_make_command_callback.vader index 6d95676f..02b2d76c 100644 --- a/test/command_callback/test_elm_make_command_callback.vader +++ b/test/command_callback/test_elm_make_command_callback.vader @@ -7,26 +7,56 @@ After: call ale#assert#TearDownLinterTest() Execute(should get valid executable with default params): - call ale#test#SetFilename('../elm-test-files/app/testfile.elm') + call ale#test#SetFilename('../elm-test-files/newapp/src/Main.elm') - let g:executable = ale#path#Simplify(g:dir . '/../elm-test-files/app/node_modules/.bin/elm') + let g:executable = ale#path#Simplify(g:dir . '/../elm-test-files/newapp/node_modules/.bin/elm') AssertLinter g:executable, - \ ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp')) . ' && ' + \ . ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' + +Execute(should get elm-test executable for test code with elm >= 0.19): + call ale#test#SetFilename('../elm-test-files/newapp/tests/TestSuite.elm') + + let g:executable = ale#path#Simplify(g:dir . '/../elm-test-files/newapp/node_modules/.bin/elm-test') + + AssertLinter g:executable, + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp')) . ' && ' + \ . ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' + +Execute(should fallback to elm executable with elm >= 0.19): + call ale#test#SetFilename('../elm-test-files/newapp-notests/tests/TestMain.elm') + + let g:executable = ale#path#Simplify(g:dir . '/../elm-test-files/newapp-notests/node_modules/.bin/elm') + + AssertLinter g:executable, + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp-notests')) . ' && ' + \ . ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' + +Execute(should get plain elm executable for test code with elm < 0.19): + call ale#test#SetFilename('../elm-test-files/oldapp/tests/TestSuite.elm') + + let g:executable = ale#path#Simplify(g:dir . '/../elm-test-files/oldapp/node_modules/.bin/elm') + + AssertLinter g:executable, + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/oldapp')) . ' && ' + \ . ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' Execute(should get valid executable with 'use_global' params): let g:ale_elm_make_use_global = 1 - call ale#test#SetFilename('../elm-test-files/app/testfile.elm') + call ale#test#SetFilename('../elm-test-files/newapp/src/Main.elm') AssertLinter 'elm', - \ ale#Escape('elm') . ' make --report=json --output=/dev/null %t' + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp')) . ' && ' + \ . ale#Escape('elm') . ' make --report=json --output=/dev/null %t' Execute(should get valid executable with 'use_global' and 'executable' params): let g:ale_elm_make_executable = 'other-elm' let g:ale_elm_make_use_global = 1 - call ale#test#SetFilename('../elm-test-files/app/testfile.elm') + call ale#test#SetFilename('../elm-test-files/newapp/src/Main.elm') AssertLinter 'other-elm', - \ ale#Escape('other-elm') . ' make --report=json --output=/dev/null %t' + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp')) . ' && ' + \ . ale#Escape('other-elm') . ' make --report=json --output=/dev/null %t' diff --git a/test/elm-test-files/app/filetest.elm b/test/elm-test-files/newapp-notests/elm.json index e69de29b..e69de29b 100644 --- a/test/elm-test-files/app/filetest.elm +++ b/test/elm-test-files/newapp-notests/elm.json diff --git a/test/elm-test-files/app/node_modules/.bin/elm b/test/elm-test-files/newapp-notests/node_modules/.bin/elm index e69de29b..e69de29b 100644 --- a/test/elm-test-files/app/node_modules/.bin/elm +++ b/test/elm-test-files/newapp-notests/node_modules/.bin/elm diff --git a/test/elm-test-files/newapp-notests/tests/TestMain.elm b/test/elm-test-files/newapp-notests/tests/TestMain.elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/newapp-notests/tests/TestMain.elm diff --git a/test/elm-test-files/newapp/elm.json b/test/elm-test-files/newapp/elm.json new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/newapp/elm.json diff --git a/test/elm-test-files/newapp/node_modules/.bin/elm b/test/elm-test-files/newapp/node_modules/.bin/elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/newapp/node_modules/.bin/elm diff --git a/test/elm-test-files/newapp/node_modules/.bin/elm-test b/test/elm-test-files/newapp/node_modules/.bin/elm-test new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/newapp/node_modules/.bin/elm-test diff --git a/test/elm-test-files/newapp/src/Main.elm b/test/elm-test-files/newapp/src/Main.elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/newapp/src/Main.elm diff --git a/test/elm-test-files/newapp/tests/TestSuite.elm b/test/elm-test-files/newapp/tests/TestSuite.elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/newapp/tests/TestSuite.elm diff --git a/test/elm-test-files/oldapp/elm-package.json b/test/elm-test-files/oldapp/elm-package.json new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/oldapp/elm-package.json diff --git a/test/elm-test-files/oldapp/node_modules/.bin/elm b/test/elm-test-files/oldapp/node_modules/.bin/elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/oldapp/node_modules/.bin/elm diff --git a/test/elm-test-files/oldapp/node_modules/.bin/elm-test b/test/elm-test-files/oldapp/node_modules/.bin/elm-test new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/oldapp/node_modules/.bin/elm-test diff --git a/test/elm-test-files/oldapp/src/Main.elm b/test/elm-test-files/oldapp/src/Main.elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/oldapp/src/Main.elm diff --git a/test/elm-test-files/oldapp/tests/TestSuite.elm b/test/elm-test-files/oldapp/tests/TestSuite.elm new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/elm-test-files/oldapp/tests/TestSuite.elm |