1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284
|
" Author: Yann Fery <yann@fery.me>
Before:
Save g:ale_set_loclist
Save g:ale_set_quickfix
Save g:ale_open_list
Save g:ale_keep_list_window_open
Save g:ale_list_window_size
Save g:ale_list_vertical
Save g:ale_buffer_info
Save g:ale_set_lists_synchronously
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_open_list = 0
let g:ale_keep_list_window_open = 0
let g:ale_list_window_size = 10
let g:ale_list_vertical = 0
let g:ale_set_lists_synchronously = 1
let g:loclist = [
\ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x'},
\ {'bufnr': bufnr(''), 'lnum': 5, 'col': 4, 'text': 'x'},
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 10, 'text': 'x'},
\ {'bufnr': bufnr(''), 'lnum': 3, 'col': 2, 'text': 'x'},
\]
let g:ale_buffer_info = {bufnr(''): {'loclist': g:loclist}}
function GetQuickfixHeight() abort
for l:win in range(1, winnr('$'))
if getwinvar(l:win, '&buftype') ==# 'quickfix'
return winheight(l:win)
endif
endfor
return 0
endfunction
" If the window is vertical, window size should match column size/width
function GetQuickfixIsVertical(cols) abort
for l:win in range(1, winnr('$'))
if getwinvar(l:win, '&buftype') is# 'quickfix'
return winwidth(l:win) == a:cols
endif
endfor
return 0
endfunction
After:
Restore
unlet! g:loclist
unlet! b:ale_list_vertical
unlet! b:ale_list_window_size
unlet! b:ale_open_list
unlet! b:ale_keep_list_window_open
unlet! b:ale_save_event_fired
delfunction GetQuickfixHeight
delfunction GetQuickfixIsVertical
" Close quickfix window after every execute block
lcl
ccl
call setloclist(0, [])
call setqflist([])
Execute(IsQuickfixOpen should return the right output):
AssertEqual 0, ale#list#IsQuickfixOpen()
call setloclist(0, g:loclist)
lopen
AssertEqual 1, ale#list#IsQuickfixOpen()
lcl
AssertEqual 0, ale#list#IsQuickfixOpen()
call setqflist(g:loclist)
copen
AssertEqual 1, ale#list#IsQuickfixOpen()
ccl
AssertEqual 0, ale#list#IsQuickfixOpen()
Execute(The quickfix window should not open by default for the loclist):
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert !ale#list#IsQuickfixOpen()
Execute(The quickfix window should open for just the loclist):
let g:ale_open_list = 1
" It should not open for an empty list.
call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen()
" With a non-empty loclist, the window must open.
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert ale#list#IsQuickfixOpen()
" Clear the list and it should close again.
call ale#list#SetLists(bufnr('%'), [])
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):
let g:ale_open_list = 1
let g:ale_list_window_size = 7
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 7, GetQuickfixHeight()
Execute(The quickfix window height should be correct for the loclist with buffer variables):
let g:ale_open_list = 1
let b:ale_list_window_size = 8
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 8, GetQuickfixHeight()
Execute(The quickfix window should be vertical for the loclist with appropriate variables):
let g:ale_open_list = 1
let b:ale_list_window_size = 8
let b:ale_list_vertical = 1
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 1, GetQuickfixIsVertical(8)
Execute(The quickfix window should be horizontal for the loclist with appropriate variables):
let g:ale_open_list = 1
let b:ale_list_window_size = 8
let b:ale_list_vertical = 0
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 0, GetQuickfixIsVertical(8)
Execute(The quickfix window should stay open for just the loclist):
let g:ale_open_list = 1
let g:ale_keep_list_window_open = 1
" The window should stay open after even after it is made blank again.
call ale#list#SetLists(bufnr('%'), g:loclist)
call ale#list#SetLists(bufnr('%'), [])
Assert ale#list#IsQuickfixOpen()
Execute(The quickfix window should not open by default when quickfix is on):
let g:ale_set_quickfix = 1
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert !ale#list#IsQuickfixOpen()
Execute(The quickfix window should open for the quickfix list):
let g:ale_set_quickfix = 1
let g:ale_open_list = 1
let g:ale_buffer_info[bufnr('') + 1] = {
\ 'loclist': [{'bufnr': -1, 'filename': '/foo/bar', 'lnum': 5, 'col': 5, 'text': 'x'}],
\}
" It should not open for an empty list.
call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen(), 'The quickfix window was opened when the list was empty'
" With a non-empty quickfix list, the window must open.
call ale#list#SetLists(bufnr('%'), g:loclist)
Assert ale#list#IsQuickfixOpen(), 'The quickfix window was closed when the list was not empty'
" Clear this List. The window should stay open, as there are other items.
let g:ale_buffer_info[bufnr('')].loclist = []
call ale#list#SetLists(bufnr('%'), [])
Assert ale#list#IsQuickfixOpen(), 'The quickfix window closed even though there are items in another buffer'
" Clear the other List now. Now the window should close.
call remove(g:ale_buffer_info, bufnr('') + 1)
call ale#list#SetLists(bufnr('%'), [])
Assert !ale#list#IsQuickfixOpen(), 'The quickfix window was not closed'
Execute(The quickfix window should stay open for the quickfix list):
let g:ale_set_quickfix = 1
let g:ale_open_list = 1
let g:ale_keep_list_window_open = 1
" The window should stay open after even after it is made blank again.
call ale#list#SetLists(bufnr('%'), g:loclist)
call ale#list#SetLists(bufnr('%'), [])
Assert ale#list#IsQuickfixOpen()
Execute(The quickfix window height should be correct for the quickfix list):
let g:ale_set_quickfix = 1
let g:ale_open_list = 1
let g:ale_list_window_size = 7
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 7, GetQuickfixHeight()
Execute(The quickfix window height should be correct for the quickfix list with buffer variables):
let g:ale_set_quickfix = 1
let g:ale_open_list = 1
let b:ale_list_window_size = 8
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 8, GetQuickfixHeight()
Execute(The quickfix window should be vertical for the quickfix with appropriate variables):
let g:ale_open_list = 1
let b:ale_list_window_size = 8
let b:ale_list_vertical = 1
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 1, GetQuickfixIsVertical(8)
Execute(The quickfix window should be horizontal for the quickfix with appropriate variables):
let g:ale_open_list = 1
let b:ale_list_window_size = 8
let b:ale_list_vertical = 0
call ale#list#SetLists(bufnr('%'), g:loclist)
AssertEqual 0, GetQuickfixIsVertical(8)
Execute(buffer-local options should be respected):
let b:ale_open_list = 1
let b:ale_keep_list_window_open = 1
call ale#list#SetLists(bufnr('%'), g:loclist)
call ale#list#SetLists(bufnr('%'), [])
Assert ale#list#IsQuickfixOpen()
Execute(The ale_open_list='on_save' option should work):
let b:ale_open_list = 'on_save'
call ale#list#SetLists(bufnr('%'), g:loclist)
" The list shouldn't open yet, the event wasn't fired.
Assert !ale#list#IsQuickfixOpen()
" Turn this option off, to ensure that we update lists immediately when we
" save buffers.
let g:ale_set_lists_synchronously = 0
let b:ale_save_event_fired = 1
call ale#list#SetLists(bufnr('%'), g:loclist)
" Now the list should have opened.
Assert ale#list#IsQuickfixOpen()
call ale#list#SetLists(bufnr('%'), [])
" The window should close again when the loclist is empty.
Assert !ale#list#IsQuickfixOpen()
Execute(The window shouldn't open on save when ale_open_list=0):
let b:ale_open_list = 0
let b:ale_save_event_fired = 1
call ale#list#SetLists(bufnr('%'), g:loclist)
" Now the list should have opened.
Assert !ale#list#IsQuickfixOpen()
|