summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/elm/make.vim70
-rw-r--r--test/command_callback/test_elm_make_command_callback.vader44
-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.elm0
-rw-r--r--test/elm-test-files/newapp/elm.json0
-rw-r--r--test/elm-test-files/newapp/node_modules/.bin/elm0
-rw-r--r--test/elm-test-files/newapp/node_modules/.bin/elm-test0
-rw-r--r--test/elm-test-files/newapp/src/Main.elm0
-rw-r--r--test/elm-test-files/newapp/tests/TestSuite.elm0
-rw-r--r--test/elm-test-files/oldapp/elm-package.json0
-rw-r--r--test/elm-test-files/oldapp/node_modules/.bin/elm0
-rw-r--r--test/elm-test-files/oldapp/node_modules/.bin/elm-test0
-rw-r--r--test/elm-test-files/oldapp/src/Main.elm0
-rw-r--r--test/elm-test-files/oldapp/tests/TestSuite.elm0
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