Run before lint cycle, rename autocmds
This commit is contained in:
parent
d6bf13502a
commit
4825cce1cc
4 changed files with 37 additions and 49 deletions
|
@ -497,14 +497,14 @@ Will give you:
|
||||||
|
|
||||||
ALE runs its own [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html)
|
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
|
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
|
processed. These events can be used to call arbitrary functions before and after
|
||||||
after ALE stops linting.
|
ALE stops linting.
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
augroup YourGroup
|
augroup YourGroup
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd User ALEStartLint call YourFunction()
|
autocmd User ALELintPre call YourFunction()
|
||||||
autocmd User ALELint call YourFunction()
|
autocmd User ALELintPost call YourFunction()
|
||||||
augroup END
|
augroup END
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -321,6 +321,8 @@ function! ale#engine#SetResults(buffer, loclist) abort
|
||||||
call ale#engine#RemoveManagedFiles(a:buffer)
|
call ale#engine#RemoveManagedFiles(a:buffer)
|
||||||
|
|
||||||
" Call user autocommands. This allows users to hook into ALE's lint cycle.
|
" 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
|
silent doautocmd <nomodeline> User ALELint
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -556,8 +558,6 @@ 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 ALEStartLint
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:ale_history_enabled
|
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.
|
" We can only clear the results if we aren't checking the buffer.
|
||||||
let l:can_clear_results = !ale#engine#IsCheckingBuffer(a:buffer)
|
let l:can_clear_results = !ale#engine#IsCheckingBuffer(a:buffer)
|
||||||
|
|
||||||
|
silent doautocmd <nomodeline> User ALELintPre
|
||||||
|
|
||||||
for l:linter in a:linters
|
for l:linter in a:linters
|
||||||
" Only run lint_file linters if we should.
|
" Only run lint_file linters if we should.
|
||||||
if !l:linter.lint_file || a:should_lint_file
|
if !l:linter.lint_file || a:should_lint_file
|
||||||
|
|
40
doc/ale.txt
40
doc/ale.txt
|
@ -2048,7 +2048,7 @@ ale#linter#Define(filetype, linter) *ale#linter#Define()*
|
||||||
the file on disk, including |g:ale_lint_on_enter|
|
the file on disk, including |g:ale_lint_on_enter|
|
||||||
and |g:ale_lint_on_save|. Linters with this option
|
and |g:ale_lint_on_save|. Linters with this option
|
||||||
set to `1` will also be run when linters are run
|
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
|
When this option is set to `1`, `read_buffer` will
|
||||||
be set automatically to `0`. The two options cannot
|
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.
|
`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
|
These |User| autocommands are triggered before and after every lint cycle.
|
||||||
cycle. It can be used to update statuslines, send notifications, or
|
It can be used to update statuslines, send notifications, etc.
|
||||||
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!'
|
|
||||||
<
|
|
||||||
The autocmd commands are run with |:silent|, so |:unsilent| is required for
|
The autocmd commands are run with |:silent|, so |:unsilent| is required for
|
||||||
echoing messges.
|
echoing messges.
|
||||||
|
|
||||||
|
For example to change the color of the statusline while the linter is
|
||||||
ALEStartLint *ALEStartLint-autocmd*
|
running:
|
||||||
|
>
|
||||||
This |User| autocommand is triggered by ALE right after it started a new
|
augroup ALEProgress
|
||||||
linting job.
|
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*
|
10. Special Thanks *ale-special-thanks*
|
||||||
|
|
||||||
|
|
|
@ -1,41 +1,21 @@
|
||||||
Before:
|
Before:
|
||||||
let g:start = 0
|
let g:pre_success = 0
|
||||||
let g:success = 0
|
let g:post_success = 0
|
||||||
let g:ale_run_synchronously = 1
|
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:
|
After:
|
||||||
let g:ale_run_synchronously = 0
|
let g:ale_run_synchronously = 0
|
||||||
let g:ale_buffer_info = {}
|
let g:ale_buffer_info = {}
|
||||||
let g:ale_linters = {}
|
|
||||||
call ale#linter#Reset()
|
|
||||||
delfunction TestCallback
|
|
||||||
augroup! VaderTest
|
augroup! VaderTest
|
||||||
|
|
||||||
Execute (Run a lint cycle, and check that a variable is set in the autocmd):
|
Execute (Run a lint cycle, and check that a variable is set in the autocmd):
|
||||||
set filetype=foobar
|
|
||||||
augroup VaderTest
|
augroup VaderTest
|
||||||
autocmd!
|
autocmd!
|
||||||
autocmd User ALEStartLint let g:start = 1
|
autocmd User ALELintPre let g:pre_success = 1
|
||||||
autocmd User ALELint let g:success = 1
|
autocmd User ALELintPost let g:post_success = 1
|
||||||
augroup end
|
augroup end
|
||||||
|
|
||||||
call ale#Lint()
|
call ale#Lint()
|
||||||
|
|
||||||
AssertEqual g:start, 1
|
AssertEqual g:pre_success, 1
|
||||||
AssertEqual g:success, 1
|
AssertEqual g:post_success, 1
|
||||||
|
|
Reference in a new issue