mirror of
https://github.com/dense-analysis/ale.git
synced 2026-10-12 16:10:13 +08:00
support tests/ with elm 0.19.0
With earlier elm versions, a separate package file is maintained for tests, which when properly configured enabled the compiler to find what it needed to compile the tests. Under elm 0.19, test dependencies are managed in the top-level package file, so `elm make` will fail on the tests. `elm-test make` is required in this case. See https://github.com/elm-explorations/test/issues/64
This commit is contained in:
1 parent
bbf02d837e
commit
ba38688dff
12 files changed
+84
-14
No files matched your search
@@ -137,9 +137,7 @@ function! ale_linters#elm#make#ParseMessageItem(item) abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Return the command to execute the linter in the projects directory.
|
function! ale_linters#elm#make#GetPackageFile(buffer) abort
|
||||||
" If it doesn't, then this will fail when imports are needed.
|
|
||||||
function! ale_linters#elm#make#GetCommand(buffer) abort
|
|
||||||
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json')
|
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json')
|
||||||
|
|
||||||
if empty(l: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')
|
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm-package.json')
|
||||||
endif
|
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)
|
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 match(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 = ''
|
let l:dir_set_cmd = ''
|
||||||
else
|
else
|
||||||
let l:root_dir = fnamemodify(l:elm_json, ':p:h')
|
|
||||||
let l:dir_set_cmd = 'cd ' . ale#Escape(l:root_dir) . ' && '
|
let l:dir_set_cmd = 'cd ' . ale#Escape(l:root_dir) . ' && '
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -161,11 +204,20 @@ function! ale_linters#elm#make#GetCommand(buffer) abort
|
|||||||
return l:dir_set_cmd . '%e make --report=json --output=/dev/null %t'
|
return l:dir_set_cmd . '%e make --report=json --output=/dev/null %t'
|
||||||
endfunction
|
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'])
|
||||||
|
else
|
||||||
|
return ale#node#FindExecutable(a:buffer, 'elm_make', ['node_modules/.bin/elm'])
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('elm', {
|
call ale#linter#Define('elm', {
|
||||||
\ 'name': 'make',
|
\ 'name': 'make',
|
||||||
\ 'executable_callback': ale#node#FindExecutableFunc('elm_make', [
|
\ 'executable_callback': 'ale_linters#elm#make#GetExecutable',
|
||||||
\ 'node_modules/.bin/elm',
|
|
||||||
\ ]),
|
|
||||||
\ 'output_stream': 'both',
|
\ 'output_stream': 'both',
|
||||||
\ 'command_callback': 'ale_linters#elm#make#GetCommand',
|
\ 'command_callback': 'ale_linters#elm#make#GetCommand',
|
||||||
\ 'callback': 'ale_linters#elm#make#Handle'
|
\ 'callback': 'ale_linters#elm#make#Handle'
|
||||||
|
|||||||
@@ -7,29 +7,47 @@ After:
|
|||||||
call ale#assert#TearDownLinterTest()
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
Execute(should get valid executable with default params):
|
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,
|
AssertLinter g:executable,
|
||||||
\ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/app')) . ' && '
|
\ '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 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'
|
\ . ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t'
|
||||||
|
|
||||||
Execute(should get valid executable with 'use_global' params):
|
Execute(should get valid executable with 'use_global' params):
|
||||||
let g:ale_elm_make_use_global = 1
|
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',
|
AssertLinter 'elm',
|
||||||
\ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/app')) . ' && '
|
\ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp')) . ' && '
|
||||||
\ . ale#Escape('elm') . ' make --report=json --output=/dev/null %t'
|
\ . ale#Escape('elm') . ' make --report=json --output=/dev/null %t'
|
||||||
|
|
||||||
Execute(should get valid executable with 'use_global' and 'executable' params):
|
Execute(should get valid executable with 'use_global' and 'executable' params):
|
||||||
let g:ale_elm_make_executable = 'other-elm'
|
let g:ale_elm_make_executable = 'other-elm'
|
||||||
let g:ale_elm_make_use_global = 1
|
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',
|
AssertLinter 'other-elm',
|
||||||
\ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/app')) . ' && '
|
\ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../elm-test-files/newapp')) . ' && '
|
||||||
\ . ale#Escape('other-elm') . ' make --report=json --output=/dev/null %t'
|
\ . ale#Escape('other-elm') . ' make --report=json --output=/dev/null %t'
|
||||||
File renamed without changes.
Generated
Vendored
File renamed without changes.
Generated
Vendored
File renamed without changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Reference in new issue
Block a user