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 =
|
let g:ale_javascript_eslint_executable =
|
||||||
\ get(g:, 'ale_javascript_eslint_executable', 'eslint')
|
\ 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)
|
function! ale_linters#javascript#eslint#Handle(buffer, lines)
|
||||||
" Matches patterns line the following:
|
" Matches patterns line the following:
|
||||||
"
|
"
|
||||||
@ -39,7 +59,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('javascript', {
|
call ale#linter#Define('javascript', {
|
||||||
\ 'name': 'eslint',
|
\ 'name': 'eslint',
|
||||||
\ 'executable': g:ale_javascript_eslint_executable,
|
\ 'executable_callback': 'ale_linters#javascript#eslint#GetExecutable',
|
||||||
\ 'command': g:ale_javascript_eslint_executable . ' -f unix --stdin --stdin-filename %s',
|
\ 'command_callback': 'ale_linters#javascript#eslint#GetCommand',
|
||||||
\ 'callback': 'ale_linters#javascript#eslint#Handle',
|
\ 'callback': 'ale_linters#javascript#eslint#Handle',
|
||||||
\})
|
\})
|
||||||
|
@ -44,6 +44,21 @@ function! ale#util#FindNearestFile(buffer, filename) abort
|
|||||||
return ''
|
return ''
|
||||||
endfunction
|
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
|
function! ale#util#GetFunction(string_or_ref) abort
|
||||||
if type(a:string_or_ref) == type('')
|
if type(a:string_or_ref) == type('')
|
||||||
return function(a:string_or_ref)
|
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|
|
Type: |String|
|
||||||
Default: `'eslint'`
|
Default: `'eslint'`
|
||||||
|
|
||||||
This variable can be changed to change the path to eslint. If you have
|
ALE will first discover the eslint path in an ancestor node_modules
|
||||||
eslint_d installed, you can set this option to use eslint_d instead.
|
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