Treat ale_open_list integer values as thresholds (#4050)

Only open list window if the number of warnings or errors equals to or
exceeds the value of ale_open_list. No change when set to `1`.

Co-authored-by: cos <cos>
This commit is contained in:
nospam2998 2022-02-04 18:56:48 +01:00 committed by GitHub
parent 5856c06775
commit a58b7b5efb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 7 deletions

View File

@ -36,12 +36,22 @@ function! ale#list#IsQuickfixOpen() abort
endfunction endfunction
" Check if we should open the list, based on the save event being fired, and " Check if we should open the list, based on the save event being fired, and
" that setting being on, or the setting just being set to `1`. " that setting being on, or that the error count is at least as high as the
function! s:ShouldOpen(buffer) abort " setting when set to an integer value.
function! s:ShouldOpen(buffer, loclist_len) abort
let l:val = ale#Var(a:buffer, 'open_list') let l:val = ale#Var(a:buffer, 'open_list')
let l:saved = getbufvar(a:buffer, 'ale_save_event_fired', 0) let l:saved = getbufvar(a:buffer, 'ale_save_event_fired', 0)
return l:val is 1 || (l:val is# 'on_save' && l:saved) return l:val > 0 ? a:loclist_len >= l:val : l:val is# 'on_save' && l:saved
endfunction
" Check if we should close the list, based on the save event being fired, and
" that setting being on, or the setting just being set to an integer value.
function! s:ShouldClose(buffer) abort
let l:val = ale#Var(a:buffer, 'open_list')
let l:saved = getbufvar(a:buffer, 'ale_save_event_fired', 0)
return !((l:val >= 1) || (l:val is# 'on_save' && l:saved))
endfunction endfunction
function! s:Deduplicate(list) abort function! s:Deduplicate(list) abort
@ -122,9 +132,9 @@ function! s:SetListsImpl(timer_id, buffer, loclist) abort
" Open a window to show the problems if we need to. " Open a window to show the problems if we need to.
" "
" We'll check if the current buffer's List is not empty here, so the " ShouldOpen() checks if the current buffer has enough problems to be
" window will only be opened if the current buffer has problems. " opened.
if s:ShouldOpen(a:buffer) && !empty(a:loclist) if s:ShouldOpen(a:buffer, len(a:loclist))
let l:winnr = winnr() let l:winnr = winnr()
let l:mode = mode() let l:mode = mode()
@ -230,7 +240,7 @@ function! ale#list#ForcePopulateErrorList(populate_quickfix) abort
endfunction endfunction
function! s:CloseWindowIfNeeded(buffer) abort function! s:CloseWindowIfNeeded(buffer) abort
if ale#Var(a:buffer, 'keep_list_window_open') || !s:ShouldOpen(a:buffer) if ale#Var(a:buffer, 'keep_list_window_open') || s:ShouldClose(a:buffer)
return return
endif endif

View File

@ -1797,6 +1797,9 @@ g:ale_open_list *g:ale_open_list*
loclist (|lopen|) or for the quickfix list instead if |g:ale_set_quickfix| loclist (|lopen|) or for the quickfix list instead if |g:ale_set_quickfix|
is `1`. (|copen|) is `1`. (|copen|)
When set to any higher numberical value, ALE will only open the window when
the number of warnings or errors are at least that many.
When set to `'on_save'`, ALE will only open the loclist after buffers have When set to `'on_save'`, ALE will only open the loclist after buffers have
been saved. The list will be opened some time after buffers are saved and been saved. The list will be opened some time after buffers are saved and
any linter for a buffer returns results. any linter for a buffer returns results.

View File

@ -97,6 +97,34 @@ Execute(The quickfix window should open for just the loclist):
call ale#list#SetLists(bufnr('%'), []) call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen() Assert !ale#list#IsQuickfixOpen()
Execute(The quickfix window should open on the correct threshold):
" The window should open for a value lower than number of entries.
let g:ale_open_list = len(g:loclist) - 1
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert ale#list#IsQuickfixOpen()
" Clear the list to be ready for a new value.
call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen()
" It should also open for a value equal to the number of entries.
let g:ale_open_list = len(g:loclist)
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert ale#list#IsQuickfixOpen()
" Clear the list again, preparing for a final value.
call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen()
" Window should not open for values higher than number of loclist entries.
let g:ale_open_list = len(g:loclist) + 1
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert !ale#list#IsQuickfixOpen()
" Clear the list just to clean up.
call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen()
Execute(The quickfix window height should be correct for the loclist): Execute(The quickfix window height should be correct for the loclist):
let g:ale_open_list = 1 let g:ale_open_list = 1
let g:ale_list_window_size = 7 let g:ale_list_window_size = 7