summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Tournoij <martin@arp242.net>2017-12-10 13:03:03 +0000
committerMartin Tournoij <martin@arp242.net>2017-12-10 13:10:52 +0000
commit4825cce1cc9ec729ea59ae90eb819f67239d335b (patch)
tree22251e4b49a7fe0ea50ca2b29a986dc40e648ad5
parentd6bf13502ad7a018a739b82bc068d299aacc5d26 (diff)
downloadale-4825cce1cc9ec729ea59ae90eb819f67239d335b.zip
Run before lint cycle, rename autocmds
-rw-r--r--README.md8
-rw-r--r--autoload/ale/engine.vim6
-rw-r--r--doc/ale.txt40
-rw-r--r--test/test_alelint_autocmd.vader32
4 files changed, 37 insertions, 49 deletions
diff --git a/README.md b/README.md
index 0292d52c..fd919c09 100644
--- a/README.md
+++ b/README.md
@@ -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
```
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index 895544fe..65e663aa 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -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
diff --git a/doc/ale.txt b/doc/ale.txt
index e45cfa92..79101c6a 100644
--- a/doc/ale.txt
+++ b/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|
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*
diff --git a/test/test_alelint_autocmd.vader b/test/test_alelint_autocmd.vader
index bf96abfb..b19e6b4e 100644
--- a/test/test_alelint_autocmd.vader
+++ b/test/test_alelint_autocmd.vader
@@ -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