Elm local install support (#915)
* Add Elm support for npm local installation
This commit is contained in:
parent
c11d2ae375
commit
18a7d32c4c
@ -87,7 +87,7 @@ formatting.
|
||||
| Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) |
|
||||
| Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) |
|
||||
| Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) !! |
|
||||
| Elm | [elm-make](https://github.com/elm-lang/elm-make), [elm-format](https://github.com/avh4/elm-format) |
|
||||
| Elm | [elm-format](https://github.com/avh4/elm-format), [elm-make](https://github.com/elm-lang/elm-make) |
|
||||
| Erb | [erb](https://github.com/jeremyevans/erubi), [erubis](https://github.com/kwatch/erubis) |
|
||||
| Erlang | [erlc](http://erlang.org/doc/man/erlc.html), [SyntaxErl](https://github.com/ten0s/syntaxerl) |
|
||||
| Fortran | [gcc](https://gcc.gnu.org/) |
|
||||
|
@ -1,6 +1,15 @@
|
||||
" Author: buffalocoder - https://github.com/buffalocoder
|
||||
" Author: buffalocoder - https://github.com/buffalocoder, soywod - https://github.com/soywod
|
||||
" Description: Elm linting in Ale. Closely follows the Syntastic checker in https://github.com/ElmCast/elm-vim.
|
||||
|
||||
call ale#Set('elm_make_executable', 'elm-make')
|
||||
call ale#Set('elm_make_use_global', 0)
|
||||
|
||||
function! ale_linters#elm#make#GetExecutable(buffer) abort
|
||||
return ale#node#FindExecutable(a:buffer, 'elm_make', [
|
||||
\ 'node_modules/.bin/elm-make',
|
||||
\])
|
||||
endfunction
|
||||
|
||||
function! ale_linters#elm#make#Handle(buffer, lines) abort
|
||||
let l:output = []
|
||||
let l:is_windows = has('win32')
|
||||
@ -52,6 +61,7 @@ endfunction
|
||||
" If it doesn't, then this will fail when imports are needed.
|
||||
function! ale_linters#elm#make#GetCommand(buffer) abort
|
||||
let l:elm_package = ale#path#FindNearestFile(a:buffer, 'elm-package.json')
|
||||
let l:elm_exe = ale_linters#elm#make#GetExecutable(a:buffer)
|
||||
if empty(l:elm_package)
|
||||
let l:dir_set_cmd = ''
|
||||
else
|
||||
@ -63,14 +73,16 @@ function! ale_linters#elm#make#GetCommand(buffer) abort
|
||||
" a sort of flag to tell the compiler not to generate an output file,
|
||||
" which is why this is hard coded here.
|
||||
" Source: https://github.com/elm-lang/elm-make/blob/master/src/Flags.hs
|
||||
let l:elm_cmd = 'elm-make --report=json --output='.ale#Escape('/dev/null')
|
||||
let l:elm_cmd = ale#Escape(l:elm_exe)
|
||||
\ . ' --report=json'
|
||||
\ . ' --output=' . ale#Escape(g:ale#util#nul_file)
|
||||
|
||||
return l:dir_set_cmd . ' ' . l:elm_cmd . ' %t'
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('elm', {
|
||||
\ 'name': 'make',
|
||||
\ 'executable': 'elm-make',
|
||||
\ 'executable_callback': 'ale_linters#elm#make#GetExecutable',
|
||||
\ 'output_stream': 'both',
|
||||
\ 'command_callback': 'ale_linters#elm#make#GetCommand',
|
||||
\ 'callback': 'ale_linters#elm#make#Handle'
|
||||
|
@ -28,5 +28,23 @@ g:ale_elm_format_options *g:ale_elm_format_options*
|
||||
|
||||
This variable can be set to pass additional options to elm-format.
|
||||
|
||||
===============================================================================
|
||||
elm-make *ale-elm-make*
|
||||
|
||||
g:ale_elm_make_executable *g:ale_elm_make_executable*
|
||||
*b:ale_elm_make_executable*
|
||||
Type: |String|
|
||||
Default: `'elm-make'`
|
||||
|
||||
See |ale-integrations-local-executables|
|
||||
|
||||
|
||||
g:ale_elm_make_use_global *g:ale_elm_make_use_global*
|
||||
*b:ale_elm_make_use_global*
|
||||
Type: |Number|
|
||||
Default: `0`
|
||||
|
||||
See |ale-integrations-local-executables|
|
||||
|
||||
===============================================================================
|
||||
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||
|
@ -217,7 +217,7 @@ Notes:
|
||||
* Dart: `dartanalyzer`
|
||||
* Dockerfile: `hadolint`
|
||||
* Elixir: `credo`, `dogma`!!
|
||||
* Elm: `elm-make, elm-format`
|
||||
* Elm: `elm-format, elm-make`
|
||||
* Erb: `erb`, `erubis`
|
||||
* Erlang: `erlc`, `SyntaxErl`
|
||||
* Fortran: `gcc`
|
||||
|
0
test/elm-test-files/app/filetest.elm
Normal file
0
test/elm-test-files/app/filetest.elm
Normal file
0
test/elm-test-files/app/node_modules/.bin/elm-make
generated
vendored
Normal file
0
test/elm-test-files/app/node_modules/.bin/elm-make
generated
vendored
Normal file
36
test/test_elm_executable_detection.vader
Normal file
36
test/test_elm_executable_detection.vader
Normal file
@ -0,0 +1,36 @@
|
||||
Before:
|
||||
call ale#test#SetDirectory('/testplugin/test')
|
||||
runtime ale_linters/elm/make.vim
|
||||
|
||||
After:
|
||||
unlet! g:ale_elm_make_use_global
|
||||
unlet! g:ale_elm_make_executable
|
||||
|
||||
call ale#test#RestoreDirectory()
|
||||
|
||||
Execute(should get valid executable with default params):
|
||||
call ale#test#SetFilename('elm-test-files/app/testfile.elm')
|
||||
|
||||
AssertEqual
|
||||
\ g:dir . '/elm-test-files/app/node_modules/.bin/elm-make',
|
||||
\ ale_linters#elm#make#GetExecutable(bufnr(''))
|
||||
|
||||
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')
|
||||
|
||||
AssertEqual
|
||||
\ 'elm-make',
|
||||
\ ale_linters#elm#make#GetExecutable(bufnr(''))
|
||||
|
||||
Execute(should get valid executable with 'use_global' and 'executable' params):
|
||||
let g:ale_elm_make_executable = 'other-elm-make'
|
||||
let g:ale_elm_make_use_global = 1
|
||||
|
||||
call ale#test#SetFilename('elm-test-files/app/testfile.elm')
|
||||
|
||||
AssertEqual
|
||||
\ 'other-elm-make',
|
||||
\ ale_linters#elm#make#GetExecutable(bufnr(''))
|
||||
|
Loading…
Reference in New Issue
Block a user