Add a function for waiting for linters to complete, and add a test which checks that linting updates the loclist.

This commit is contained in:
w0rp
2016-10-17 23:26:19 +01:00
parent 654a172473
commit bf45ab6d8d
3 changed files with 64 additions and 0 deletions

View File

@@ -254,3 +254,39 @@ function! ale#engine#Invoke(buffer, linter) abort
endif
endif
endfunction
" This function can be called with a timeout to wait for all jobs to finish.
" If the jobs to not finish in the given number of milliseconds,
" an exception will be thrown.
"
" The time taken will be a very rough approximation, and more time may be
" permitted than is specified.
function! ale#engine#WaitForJobs(deadline) abort
let l:time_ticked = 0
let l:job_list = []
for l:job_id in keys(s:job_info_map)
call add(l:job_list, s:job_info_map[l:job_id].linter.job)
endfor
let l:should_wait_more = 1
while l:should_wait_more
let l:should_wait_more = 0
for l:job in l:job_list
if job_status(l:job) ==# 'run'
if l:time_ticked > a:deadline
" Stop waiting after a timeout, so we don't wait forever.
throw 'Jobs did not complete on time!'
endif
" Wait another 10 milliseconds
let l:time_ticked += 10
let l:should_wait_more = 1
sleep 10ms
break
endif
endfor
endwhile
endfunction