diff options
author | w0rp <devw0rp@gmail.com> | 2017-07-31 22:36:30 +0100 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2017-07-31 22:36:30 +0100 |
commit | ec82530247547a696f888cdefd4aeec5cf3d40cf (patch) | |
tree | 50f5819e291200cfeabf68b614c0e49ac8544e46 | |
parent | 7c32ef104bea322114e9c2bcfbd939aa22ee00af (diff) | |
download | ale-ec82530247547a696f888cdefd4aeec5cf3d40cf.zip |
#734 - Do not clear file linter results when no buffers are run
-rw-r--r-- | autoload/ale/engine.vim | 29 | ||||
-rw-r--r-- | test/test_lint_file_linters.vader | 51 |
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() |