Run before lint cycle, rename autocmds

This commit is contained in:
Martin Tournoij 2017-12-10 13:03:03 +00:00
parent d6bf13502a
commit 4825cce1cc
No known key found for this signature in database
GPG key ID: A6258419189EE585
4 changed files with 37 additions and 49 deletions

View file

@ -497,14 +497,14 @@ Will give you:
ALE runs its own [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html)
events whenever has a linter is started and has been successfully executed and
processed. This autocmd event can be used to call arbitrary functions before and
after ALE stops linting.
processed. These events can be used to call arbitrary functions before and after
ALE stops linting.
```vim
augroup YourGroup
autocmd!
autocmd User ALEStartLint call YourFunction()
autocmd User ALELint call YourFunction()
autocmd User ALELintPre call YourFunction()
autocmd User ALELintPost call YourFunction()
augroup END
```

View file

@ -321,6 +321,8 @@ function! ale#engine#SetResults(buffer, loclist) abort
call ale#engine#RemoveManagedFiles(a:buffer)
" Call user autocommands. This allows users to hook into ALE's lint cycle.
silent doautocmd <nomodeline> User ALELintPost
" Old DEPRECATED name; call it for backwards compatibility.
silent doautocmd <nomodeline> User ALELint
endif
endfunction
@ -556,8 +558,6 @@ function! s:RunJob(options) abort
\ 'output': [],
\ 'next_chain_index': l:next_chain_index,
\}
silent doautocmd <nomodeline> User ALEStartLint
endif
if g:ale_history_enabled
@ -787,6 +787,8 @@ function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort
" We can only clear the results if we aren't checking the buffer.
let l:can_clear_results = !ale#engine#IsCheckingBuffer(a:buffer)
silent doautocmd <nomodeline> User ALELintPre
for l:linter in a:linters
" Only run lint_file linters if we should.
if !l:linter.lint_file || a:should_lint_file

View file

@ -2048,7 +2048,7 @@ ale#linter#Define(filetype, linter) *ale#linter#Define()*
the file on disk, including |g:ale_lint_on_enter|
and |g:ale_lint_on_save|. Linters with this option
set to `1` will also be run when linters are run
manually, per |ALELint-autocmd|.
manually, per |ALELintPost-autocmd|.
When this option is set to `1`, `read_buffer` will
be set automatically to `0`. The two options cannot
@ -2182,26 +2182,32 @@ ale#statusline#Count(buffer) *ale#statusline#Count()*
`total` -> The total number of problems.
ALELint *ALELint-autocmd*
ALELintPre ALELintPost *ALELintPre-autocmd* *ALELintPost-autocmd*
This |User| autocommand is triggered by ALE every time it completes a lint
cycle. It can be used to update statuslines, send notifications, or
complete any other operation that needs to be done after linting has been
performed.
For example, you can echo a message when linting is complete like so:
>
autocmd User ALELint unsilent echom 'ALE run!'
<
These |User| autocommands are triggered before and after every lint cycle.
It can be used to update statuslines, send notifications, etc.
The autocmd commands are run with |:silent|, so |:unsilent| is required for
echoing messges.
ALEStartLint *ALEStartLint-autocmd*
This |User| autocommand is triggered by ALE right after it started a new
linting job.
For example to change the color of the statusline while the linter is
running:
>
augroup ALEProgress
autocmd!
autocmd User ALELintPre hi Statusline ctermfg=darkgrey
autocmd User ALELintPOST hi Statusline ctermfg=NONE
augroup end
<
Or to display the progress in the statusline:
>
let s:ale_running = 0
let l:stl .= '%{s:ale_running ? "[linting]" : ""}'
augroup ALEProgress
autocmd!
autocmd User ALELintPre let s:ale_running = 1 | redrawstatus
autocmd User ALELintPost let s:ale_running = 0 | redrawstatus
augroup end
<
===============================================================================
10. Special Thanks *ale-special-thanks*

View file

@ -1,41 +1,21 @@
Before:
let g:start = 0
let g:success = 0
let g:pre_success = 0
let g:post_success = 0
let g:ale_run_synchronously = 1
function! TestCallback(buffer, output)
return [{
\ 'lnum': 1,
\ 'col': 3,
\ 'text': 'baz boz',
\}]
endfunction
call ale#linter#Define('foobar', {
\ 'name': 'testlinter',
\ 'callback': 'TestCallback',
\ 'executable': has('win32') ? 'cmd' : 'true',
\ 'command': has('win32') ? 'echo' : 'true',
\})
"let g:ale_linters = {'foobar': ['lint_file_linter']}
After:
let g:ale_run_synchronously = 0
let g:ale_buffer_info = {}
let g:ale_linters = {}
call ale#linter#Reset()
delfunction TestCallback
augroup! VaderTest
Execute (Run a lint cycle, and check that a variable is set in the autocmd):
set filetype=foobar
augroup VaderTest
autocmd!
autocmd User ALEStartLint let g:start = 1
autocmd User ALELint let g:success = 1
autocmd User ALELintPre let g:pre_success = 1
autocmd User ALELintPost let g:post_success = 1
augroup end
call ale#Lint()
AssertEqual g:start, 1
AssertEqual g:success, 1
AssertEqual g:pre_success, 1
AssertEqual g:post_success, 1