summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-07-31 22:36:30 +0100
committerw0rp <devw0rp@gmail.com>2017-07-31 22:36:30 +0100
commitec82530247547a696f888cdefd4aeec5cf3d40cf (patch)
tree50f5819e291200cfeabf68b614c0e49ac8544e46
parent7c32ef104bea322114e9c2bcfbd939aa22ee00af (diff)
downloadale-ec82530247547a696f888cdefd4aeec5cf3d40cf.zip
#734 - Do not clear file linter results when no buffers are run
-rw-r--r--autoload/ale/engine.vim29
-rw-r--r--test/test_lint_file_linters.vader51
2 files changed, 58 insertions, 22 deletions
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index 455772f3..76c529fb 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -667,25 +667,26 @@ function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort
call s:StopCurrentJobs(a:buffer, a:should_lint_file)
call s:RemoveProblemsForDisabledLinters(a:buffer, a:linters)
- let l:any_linter_ran = 0
+ " We can only clear the results if we aren't checking the buffer.
+ let l:can_clear_results = !ale#engine#IsCheckingBuffer(a:buffer)
for l:linter in a:linters
- " Skip linters for checking files if we shouldn't check the file.
- if l:linter.lint_file && !a:should_lint_file
- continue
- endif
-
- if s:RunLinter(a:buffer, l:linter)
- let l:any_linter_ran = 1
+ " Only run lint_file linters if we should.
+ if !l:linter.lint_file || a:should_lint_file
+ if s:RunLinter(a:buffer, l:linter)
+ " If a single linter ran, we shouldn't clear everything.
+ let l:can_clear_results = 0
+ endif
+ else
+ " If we skipped running a lint_file linter still in the list,
+ " we shouldn't clear everything.
+ let l:can_clear_results = 0
endif
endfor
- " If we didn't manage to start checking the buffer with anything,
- " and there's nothing running currently for the buffer, then clear the
- " results.
- "
- " We need to use both checks, as we run some tests synchronously.
- if !l:any_linter_ran && !ale#engine#IsCheckingBuffer(a:buffer)
+ " Clear the results if we can. This needs to be done when linters are
+ " disabled, or ALE itself is disabled.
+ if l:can_clear_results
call ale#engine#SetResults(a:buffer, [])
endif
endfunction
diff --git a/test/test_lint_file_linters.vader b/test/test_lint_file_linters.vader
index b0dc1eb3..a82db727 100644
--- a/test/test_lint_file_linters.vader
+++ b/test/test_lint_file_linters.vader
@@ -1,6 +1,11 @@
Before:
Save g:ale_run_synchronously
+ Save g:ale_buffer_info
+ Save g:ale_linters
+
+ let g:ale_buffer_info = {}
let g:ale_run_synchronously = 1
+ call ale#ResetLintFileMarkers()
let g:buffer_result = [
\ {
@@ -95,8 +100,6 @@ Given foobar (Some imaginary filetype):
baz
Execute(Running linters without 'lint_file' should run only buffer linters):
- call ale#ResetLintFileMarkers()
- let g:ale_buffer_info = {}
call ale#Queue(0)
AssertEqual [
@@ -115,9 +118,6 @@ Execute(Running linters without 'lint_file' should run only buffer linters):
\], GetSimplerLoclist()
Execute(Running linters with 'lint_file' should run all linters):
- call ale#ResetLintFileMarkers()
- let g:ale_buffer_info = {}
-
Assert filereadable(expand('%:p')), 'The file was not readable'
call ale#Queue(0, 'lint_file')
@@ -150,9 +150,6 @@ Execute(Running linters with 'lint_file' should run all linters):
\], GetSimplerLoclist()
Execute(Linter errors from files should be kept):
- call ale#ResetLintFileMarkers()
- let g:ale_buffer_info = {}
-
Assert filereadable(expand('%:p')), 'The file was not readable'
call ale#Queue(0, 'lint_file')
@@ -189,3 +186,41 @@ Execute(Linter errors from files should be kept):
\ 'type': 'E',
\ },
\], GetSimplerLoclist()
+
+Execute(Linter errors from files should be kept when no other linters are run):
+ let g:ale_linters = {'foobar': ['lint_file_linter']}
+ Assert filereadable(expand('%:p')), 'The file was not readable'
+
+ call ale#Queue(0, 'lint_file')
+
+ AssertEqual [
+ \ {
+ \ 'lnum': 1,
+ \ 'col': 3,
+ \ 'text': 'file warning',
+ \ 'type': 'W',
+ \ },
+ \ {
+ \ 'lnum': 2,
+ \ 'col': 3,
+ \ 'text': 'file error',
+ \ 'type': 'E',
+ \ },
+ \], GetSimplerLoclist()
+
+ call ale#Queue(0)
+
+ AssertEqual [
+ \ {
+ \ 'lnum': 1,
+ \ 'col': 3,
+ \ 'text': 'file warning',
+ \ 'type': 'W',
+ \ },
+ \ {
+ \ 'lnum': 2,
+ \ 'col': 3,
+ \ 'text': 'file error',
+ \ 'type': 'E',
+ \ },
+ \], GetSimplerLoclist()