Support loading eslint from node_modules, re issue #118.
This commit is contained in:
parent
f94865c4ce
commit
36461b69d7
@ -4,6 +4,26 @@
|
||||
let g:ale_javascript_eslint_executable =
|
||||
\ get(g:, 'ale_javascript_eslint_executable', 'eslint')
|
||||
|
||||
let g:ale_javascript_eslint_use_global =
|
||||
\ get(g:, 'ale_javascript_eslint_use_global', 0)
|
||||
|
||||
function! ale_linters#javascript#eslint#GetExecutable(buffer) abort
|
||||
if g:ale_javascript_eslint_use_global
|
||||
return g:ale_javascript_eslint_executable
|
||||
endif
|
||||
|
||||
return ale#util#ResolveLocalPath(
|
||||
\ a:buffer,
|
||||
\ 'node_modules/.bin/eslint',
|
||||
\ g:ale_javascript_eslint_executable
|
||||
\)
|
||||
endfunction
|
||||
|
||||
function! ale_linters#javascript#eslint#GetCommand(buffer) abort
|
||||
return ale_linters#javascript#eslint#GetExecutable(a:buffer)
|
||||
\ . ' -f unix --stdin --stdin-filename %s'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#javascript#eslint#Handle(buffer, lines)
|
||||
" Matches patterns line the following:
|
||||
"
|
||||
@ -39,7 +59,7 @@ endfunction
|
||||
|
||||
call ale#linter#Define('javascript', {
|
||||
\ 'name': 'eslint',
|
||||
\ 'executable': g:ale_javascript_eslint_executable,
|
||||
\ 'command': g:ale_javascript_eslint_executable . ' -f unix --stdin --stdin-filename %s',
|
||||
\ 'executable_callback': 'ale_linters#javascript#eslint#GetExecutable',
|
||||
\ 'command_callback': 'ale_linters#javascript#eslint#GetCommand',
|
||||
\ 'callback': 'ale_linters#javascript#eslint#Handle',
|
||||
\})
|
||||
|
@ -44,6 +44,21 @@ function! ale#util#FindNearestFile(buffer, filename) abort
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
" Given a buffer, a string to search for, an a global fallback for when
|
||||
" the search fails, look for a file in parent paths, and if that fails,
|
||||
" use the global fallback path instead.
|
||||
function! ale#util#ResolveLocalPath(buffer, search_string, global_fallback) abort
|
||||
" Search for a locally installed file first.
|
||||
let l:path = ale#util#FindNearestFile(a:buffer, a:search_string)
|
||||
|
||||
" If the serach fails, try the global executable instead.
|
||||
if empty(l:path)
|
||||
let l:path = a:global_fallback
|
||||
endif
|
||||
|
||||
return l:path
|
||||
endfunction
|
||||
|
||||
function! ale#util#GetFunction(string_or_ref) abort
|
||||
if type(a:string_or_ref) == type('')
|
||||
return function(a:string_or_ref)
|
||||
|
21
doc/ale.txt
21
doc/ale.txt
@ -370,8 +370,25 @@ g:ale_javascript_eslint_executable *g:ale_javascript_eslint_executable*
|
||||
Type: |String|
|
||||
Default: `'eslint'`
|
||||
|
||||
This variable can be changed to change the path to eslint. If you have
|
||||
eslint_d installed, you can set this option to use eslint_d instead.
|
||||
ALE will first discover the eslint path in an ancestor node_modules
|
||||
directory. If no such path exists, this variable will be used instead.
|
||||
|
||||
This variable can be set to change the path to eslint. If you have eslint_d
|
||||
installed, you can set this option to use eslint_d instead.
|
||||
|
||||
If you wish to use only a globally installed version of eslint, set
|
||||
|g:ale_javascript_eslint_use_global| to `1`.
|
||||
|
||||
|
||||
g:ale_javascript_eslint_use_global *g:ale_javascript_eslint_use_global*
|
||||
|
||||
Type: |String|
|
||||
Default: `0`
|
||||
|
||||
This variable controls whether or not ALE will search for a local path for
|
||||
eslint first. If this variable is set to `1`, then ALE will always use the
|
||||
global version of eslint, in preference to locally installed versions of
|
||||
eslint in node_modules.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
15
test/test_resolve_local_path.vader
Normal file
15
test/test_resolve_local_path.vader
Normal file
@ -0,0 +1,15 @@
|
||||
Execute(Open a file some directory down):
|
||||
silent! cd /testplugin/test
|
||||
:e! top/middle/bottom/dummy.txt
|
||||
|
||||
Then(We should be able to to find the local version of a file):
|
||||
AssertEqual
|
||||
\ expand('%:p:h:h:h:h') . '/top/example.ini',
|
||||
\ ale#util#ResolveLocalPath(bufnr('%'), 'example.ini', '/global/config.ini')
|
||||
|
||||
Execute(Do nothing):
|
||||
|
||||
Then(We shouldn't find anything for files which don't match):
|
||||
AssertEqual
|
||||
\ '/global/config.ini',
|
||||
\ ale#util#ResolveLocalPath(bufnr('%'), 'missing.ini', '/global/config.ini')
|
Loading…
Reference in New Issue
Block a user