Add ALEJobStarted User autocommand event

The ALELintPre and ALELintPost autocommand events are currently being
used by lightline-ale to refresh the status line and check the linter
status for a current buffer. One of the plugin's checks looks to see if
linters are currently running, via ale#engine#IsCheckingBuffer(). This
currently only works partially in certain situations. In my particular
case, working with Go files, this only seems to function properly when a
file is initially opened. Saving a file does not correctly update the
status.

This seems to be due to the fact that ALELintPre actually runs before
any jobs are carried out, making it plausible that hooking into
ALELintPre for the purpose of checking to see if there are any currently
running linters for a buffer is unreliable as it would be prone to
pretty obvious race conditions.

This adds a new User autocommand, ALEJobStarted, that gets fired at the
start of every new job that is successfully run. This allows a better
point to hook into checking the linter status of a buffer using
ale#engine#IsCheckingBuffer() by ensuring that at least one job has
started by the time IsCheckingBuffer is run.
This commit is contained in:
Chris Marchesi 2018-04-27 15:40:02 -07:00
parent e6fe2d86b8
commit b7996803c9
No known key found for this signature in database
GPG Key ID: 8D6F1589D9834498
2 changed files with 9 additions and 0 deletions

View File

@ -586,6 +586,8 @@ function! s:RunJob(options) abort
\ 'output': [], \ 'output': [],
\ 'next_chain_index': l:next_chain_index, \ 'next_chain_index': l:next_chain_index,
\} \}
silent doautocmd <nomodeline> User ALEJobStarted
endif endif
if g:ale_history_enabled if g:ale_history_enabled

View File

@ -2452,7 +2452,14 @@ ALEFixPost *ALEFixPost-autocmd*
autocmd User ALELintPre let s:ale_running = 1 | redrawstatus autocmd User ALELintPre let s:ale_running = 1 | redrawstatus
autocmd User ALELintPost let s:ale_running = 0 | redrawstatus autocmd User ALELintPost let s:ale_running = 0 | redrawstatus
augroup end augroup end
< <
ALEJobStarted *ALEJobStarted-autocmd*
This |User| autocommand is triggered immediately after a job is successfully
run. This provides better accuracy for checking linter status with
|ale#engine#IsCheckingBuffer()| over |ALELintPre|, which is actually
triggered before any linters are executed.
=============================================================================== ===============================================================================
10. Special Thanks *ale-special-thanks* 10. Special Thanks *ale-special-thanks*