support jsonlint local executable

This commit is contained in:
davidsierradz 2019-03-15 16:21:48 -05:00
parent 80ef7ea2d0
commit dfff73795a
7 changed files with 81 additions and 4 deletions

View File

@ -1,4 +1,21 @@
" Author: KabbAmine <amine.kabb@gmail.com> " Author: KabbAmine <amine.kabb@gmail.com>, David Sierra <https://github.com/davidsierradz>
call ale#Set('json_jsonlint_executable', 'jsonlint')
call ale#Set('json_jsonlint_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#json#jsonlint#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'json_jsonlint', [
\ 'node_modules/.bin/jsonlint',
\ 'node_modules/jsonlint/lib/cli.js',
\])
endfunction
function! ale_linters#json#jsonlint#GetCommand(buffer) abort
let l:executable = ale_linters#json#jsonlint#GetExecutable(a:buffer)
return ale#node#Executable(a:buffer, l:executable)
\ . ' --compact -'
endfunction
function! ale_linters#json#jsonlint#Handle(buffer, lines) abort function! ale_linters#json#jsonlint#Handle(buffer, lines) abort
" Matches patterns like the following: " Matches patterns like the following:
@ -19,8 +36,8 @@ endfunction
call ale#linter#Define('json', { call ale#linter#Define('json', {
\ 'name': 'jsonlint', \ 'name': 'jsonlint',
\ 'executable': 'jsonlint', \ 'executable': function('ale_linters#json#jsonlint#GetExecutable'),
\ 'output_stream': 'stderr', \ 'output_stream': 'stderr',
\ 'command': 'jsonlint --compact -', \ 'command': function('ale_linters#json#jsonlint#GetCommand'),
\ 'callback': 'ale_linters#json#jsonlint#Handle', \ 'callback': 'ale_linters#json#jsonlint#Handle',
\}) \})

View File

@ -52,7 +52,21 @@ g:ale_json_fixjson_use_global *g:ale_json_fixjson_use_global*
=============================================================================== ===============================================================================
jsonlint *ale-json-jsonlint* jsonlint *ale-json-jsonlint*
There are no options available. g:ale_json_jsonlint_executable *g:ale_json_jsonlint_executable*
*b:ale_json_jsonlint_executable*
Type: |String|
Default: `'jsonlint'`
The executable that will be run for jsonlint.
g:ale_json_jsonlint_use_global *g:ale_json_jsonlint_use_global*
*b:ale_json_jsonlint_use_global*
Type: |Number|
Default: `get(g:, 'ale_use_global_executables', 0)`
See |ale-integrations-local-executables|
=============================================================================== ===============================================================================

View File

View File

View File

@ -0,0 +1,46 @@
Before:
call ale#test#SetDirectory('/testplugin/test')
runtime ale_linters/json/jsonlint.vim
After:
let g:ale_has_override = {}
let g:ale_json_jsonlint_executable = 'jsonlint'
let g:ale_json_jsonlint_use_global = 0
call ale#test#RestoreDirectory()
call ale#linter#Reset()
Execute(local executable should be detected correctly):
call ale#test#SetFilename('jsonlint-test-files/app/src/app.json')
AssertEqual
\ ale#path#Simplify(g:dir . '/jsonlint-test-files/app/node_modules/.bin/jsonlint'),
\ ale_linters#json#jsonlint#GetExecutable(bufnr(''))
Execute(recursively executable should be detected correctly):
call ale#test#SetFilename('jsonlint-test-files/app-without-jsonlint/src/app.json')
AssertEqual
\ ale#path#Simplify(g:dir . '/jsonlint-test-files/node_modules/jsonlint/lib/cli.js'),
\ ale_linters#json#jsonlint#GetExecutable(bufnr(''))
Execute(use_global should override project executable):
let g:ale_json_jsonlint_use_global = 1
call ale#test#SetFilename('jsonlint-test-files/app/src/app.json')
AssertEqual
\ 'jsonlint',
\ ale_linters#json#jsonlint#GetExecutable(bufnr(''))
Execute(manually defined should override default executable):
let g:ale_json_jsonlint_use_global = 1
let g:ale_json_jsonlint_executable = 'custom_jsonlint'
call ale#test#SetFilename('jsonlint-test-files/app/src/app.json')
AssertEqual
\ 'custom_jsonlint',
\ ale_linters#json#jsonlint#GetExecutable(bufnr(''))