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:
parent
654a172473
commit
bf45ab6d8d
3 changed files with 64 additions and 0 deletions
11
.eslintrc.js
Normal file
11
.eslintrc.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module.exports = {
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 6,
|
||||||
|
sourceType: "module",
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
semi: 'error',
|
||||||
|
'space-infix-ops': 'warn',
|
||||||
|
radix: 'error',
|
||||||
|
}
|
||||||
|
}
|
|
@ -254,3 +254,39 @@ function! ale#engine#Invoke(buffer, linter) abort
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction
|
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
|
||||||
|
|
17
test/test_linting_updates_loclist.vader
Normal file
17
test/test_linting_updates_loclist.vader
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
Given javascript (Some JavaScript with problems):
|
||||||
|
var y = 3+3;
|
||||||
|
var y = 3
|
||||||
|
|
||||||
|
Before:
|
||||||
|
let g:ale_buffer_loclist_map = {}
|
||||||
|
let g:expected_data = {bufnr('%'): [{'lnum': 1, 'bufnr': bufnr('%'), 'vcol': 0, 'linter_name': 'eslint', 'nr': -1, 'type': 'W', 'col': 10, 'text': 'Infix operators must be spaced. (space-infix-ops)'}, {'lnum': 2, 'bufnr': bufnr('%'), 'vcol': 0, 'linter_name': 'eslint', 'nr': -1, 'type': 'E', 'col': 10, 'text': 'Missing semicolon. (semi)'}]}
|
||||||
|
|
||||||
|
After:
|
||||||
|
let g:ale_buffer_loclist_map = {}
|
||||||
|
unlet g:expected_data
|
||||||
|
|
||||||
|
Execute(The loclist should be updated after linting is done):
|
||||||
|
call ale#Lint()
|
||||||
|
call ale#engine#WaitForJobs(2000)
|
||||||
|
|
||||||
|
AssertEqual g:expected_data, g:ale_buffer_loclist_map
|
Reference in a new issue