34e409ea21
`lint_file` can now be computed dynamically with a callback function, which can return a deferred result, as per `ale#command#Run`. This allows linters to dynamically switch between checking files on disk, or checking code on the fly. Some tests have been fixed on Windows.
134 lines
3.3 KiB
Text
134 lines
3.3 KiB
Text
Before:
|
|
Save g:ale_enabled
|
|
Save g:ale_run_synchronously
|
|
Save g:ale_set_lists_synchronously
|
|
Save g:ale_buffer_info
|
|
|
|
let g:ale_enabled = 1
|
|
let g:ale_buffer_info = {}
|
|
let g:ale_run_synchronously = 1
|
|
let g:ale_set_lists_synchronously = 1
|
|
|
|
function! TestCallback(buffer, output)
|
|
" Windows adds extra spaces to the text from echo.
|
|
return [{
|
|
\ 'lnum': 2,
|
|
\ 'col': 3,
|
|
\ 'text': 'testlinter1',
|
|
\}]
|
|
endfunction
|
|
function! TestCallback2(buffer, output)
|
|
" Windows adds extra spaces to the text from echo.
|
|
return [{
|
|
\ 'lnum': 1,
|
|
\ 'col': 3,
|
|
\ 'text': 'testlinter2',
|
|
\}]
|
|
endfunction
|
|
function! TestCallback3(buffer, output)
|
|
" Windows adds extra spaces to the text from echo.
|
|
return [{
|
|
\ 'lnum': 3,
|
|
\ 'col': 3,
|
|
\ 'text': 'testlinter3',
|
|
\}]
|
|
endfunction
|
|
|
|
" These two linters computer their lint_file values after running commands.
|
|
call ale#linter#Define('foobar', {
|
|
\ 'name': 'testlinter1',
|
|
\ 'callback': 'TestCallback',
|
|
\ 'executable': has('win32') ? 'cmd' : 'echo',
|
|
\ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
|
|
\ 'lint_file': {b -> ale#command#Run(b, 'echo', {-> 1})},
|
|
\})
|
|
call ale#linter#Define('foobar', {
|
|
\ 'name': 'testlinter2',
|
|
\ 'callback': 'TestCallback2',
|
|
\ 'executable': has('win32') ? 'cmd' : 'echo',
|
|
\ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
|
|
\ 'lint_file': {b -> ale#command#Run(b, 'echo', {-> ale#command#Run(b, 'echo', {-> 1})})},
|
|
\})
|
|
" This one directly computes the result.
|
|
call ale#linter#Define('foobar', {
|
|
\ 'name': 'testlinter3',
|
|
\ 'callback': 'TestCallback3',
|
|
\ 'executable': has('win32') ? 'cmd' : 'echo',
|
|
\ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
|
|
\ 'lint_file': {b -> 1},
|
|
\})
|
|
|
|
let g:filename = tempname()
|
|
call writefile([], g:filename)
|
|
call ale#test#SetFilename(g:filename)
|
|
|
|
After:
|
|
delfunction TestCallback
|
|
|
|
call ale#engine#Cleanup(bufnr(''))
|
|
Restore
|
|
call ale#linter#Reset()
|
|
|
|
" Items and markers, etc.
|
|
call setloclist(0, [])
|
|
call clearmatches()
|
|
call ale#sign#Clear()
|
|
|
|
if filereadable(g:filename)
|
|
call delete(g:filename)
|
|
endif
|
|
|
|
unlet g:filename
|
|
|
|
Given foobar(A file with some lines):
|
|
foo
|
|
bar
|
|
baz
|
|
|
|
Execute(lint_file results where the result is eventually computed should be run):
|
|
call ale#Queue(0, 'lint_file')
|
|
call ale#test#FlushJobs()
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ {
|
|
\ 'bufnr': bufnr('%'),
|
|
\ 'lnum': 1,
|
|
\ 'vcol': 0,
|
|
\ 'col': 3,
|
|
\ 'text': 'testlinter2',
|
|
\ 'type': 'E',
|
|
\ 'nr': -1,
|
|
\ 'pattern': '',
|
|
\ 'valid': 1,
|
|
\ },
|
|
\ {
|
|
\ 'bufnr': bufnr('%'),
|
|
\ 'lnum': 2,
|
|
\ 'vcol': 0,
|
|
\ 'col': 3,
|
|
\ 'text': 'testlinter1',
|
|
\ 'type': 'E',
|
|
\ 'nr': -1,
|
|
\ 'pattern': '',
|
|
\ 'valid': 1,
|
|
\ },
|
|
\ {
|
|
\ 'bufnr': bufnr('%'),
|
|
\ 'lnum': 3,
|
|
\ 'vcol': 0,
|
|
\ 'col': 3,
|
|
\ 'text': 'testlinter3',
|
|
\ 'type': 'E',
|
|
\ 'nr': -1,
|
|
\ 'pattern': '',
|
|
\ 'valid': 1,
|
|
\ },
|
|
\ ],
|
|
\ ale#test#GetLoclistWithoutModule()
|
|
|
|
Execute(Linters where lint_file eventually evaluates to 1 shouldn't be run if we don't want to run them):
|
|
call ale#Queue(0, '')
|
|
call ale#test#FlushJobs()
|
|
|
|
AssertEqual [], ale#test#GetLoclistWithoutModule()
|