Take sign information out of the buffer variables, and make it so dummy signs are set and removed more reliably.
This commit is contained in:
parent
ca18a80e3e
commit
ec2845eefa
@ -23,12 +23,10 @@ endfunction
|
||||
function! ale#engine#InitBufferInfo(buffer) abort
|
||||
if !has_key(g:ale_buffer_info, a:buffer)
|
||||
" job_list will hold the list of jobs
|
||||
" dummy_sign_set will tell us if we previously created a dummy sign.
|
||||
" loclist holds the loclist items after all jobs have completed.
|
||||
" new_loclist holds loclist items while jobs are being run.
|
||||
let g:ale_buffer_info[a:buffer] = {
|
||||
\ 'job_list': [],
|
||||
\ 'dummy_sign_set': 0,
|
||||
\ 'loclist': [],
|
||||
\ 'new_loclist': [],
|
||||
\}
|
||||
|
@ -31,7 +31,7 @@ function! ale#sign#FindCurrentSigns(buffer) abort
|
||||
" Matches output like :
|
||||
" line=4 id=1 name=ALEErrorSign
|
||||
" строка=1 id=1000001 имя=ALEErrorSign
|
||||
let l:pattern = 'id=\(\d\+\).*=ALE\(Warning\|Error\)Sign'
|
||||
let l:pattern = 'id=\(\d\+\).*=ALE\(Warning\|Error\|Dummy\)Sign'
|
||||
|
||||
redir => l:output
|
||||
silent exec 'sign place buffer=' . a:buffer
|
||||
@ -88,26 +88,36 @@ endfunction
|
||||
function! ale#sign#SetSigns(buffer, loclist) abort
|
||||
let l:signlist = ale#sign#CombineSigns(a:loclist)
|
||||
|
||||
if len(l:signlist) > 0 || g:ale_sign_column_always
|
||||
if !g:ale_buffer_info[a:buffer].dummy_sign_set
|
||||
" Insert a dummy sign if one is missing.
|
||||
execute 'sign place ' . g:ale_sign_offset
|
||||
\ . ' line=1 name=ALEDummySign buffer='
|
||||
\ . a:buffer
|
||||
|
||||
let g:ale_buffer_info[a:buffer].dummy_sign_set = 1
|
||||
endif
|
||||
endif
|
||||
|
||||
" Find the current signs with the markers we use.
|
||||
" Find the current markers
|
||||
let l:current_id_list = ale#sign#FindCurrentSigns(a:buffer)
|
||||
let l:dummy_sign_set = 0
|
||||
|
||||
" Remove those markers.
|
||||
" Check if we set the dummy sign already.
|
||||
for l:current_id in l:current_id_list
|
||||
exec 'sign unplace ' . l:current_id . ' buffer=' . a:buffer
|
||||
if l:current_id == g:ale_sign_offset
|
||||
let l:dummy_sign_set = 1
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Now set all of the signs.
|
||||
" If we haven't already set a dummy sign, and we have some previous signs
|
||||
" or always want a dummy sign, then set one, to keep the sign column open.
|
||||
if !l:dummy_sign_set && (len(l:signlist) > 0 || g:ale_sign_column_always)
|
||||
execute 'sign place ' . g:ale_sign_offset
|
||||
\ . ' line=1 name=ALEDummySign buffer='
|
||||
\ . a:buffer
|
||||
|
||||
let l:dummy_sign_set = 1
|
||||
endif
|
||||
|
||||
" Now remove the previous signs. The dummy will hold the column open
|
||||
" while we add the new signs, if we had signs before.
|
||||
for l:current_id in l:current_id_list
|
||||
if l:current_id != g:ale_sign_offset
|
||||
exec 'sign unplace ' . l:current_id . ' buffer=' . a:buffer
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Add the new signs,
|
||||
for l:index in range(0, len(l:signlist) - 1)
|
||||
let l:sign = l:signlist[l:index]
|
||||
let l:type = l:sign['type'] ==# 'W' ? 'ALEWarningSign' : 'ALEErrorSign'
|
||||
@ -120,11 +130,10 @@ function! ale#sign#SetSigns(buffer, loclist) abort
|
||||
exec l:sign_line
|
||||
endfor
|
||||
|
||||
if !g:ale_sign_column_always && len(l:signlist) > 0
|
||||
if g:ale_buffer_info[a:buffer].dummy_sign_set
|
||||
execute 'sign unplace ' . g:ale_sign_offset . ' buffer=' . a:buffer
|
||||
|
||||
let g:ale_buffer_info[a:buffer].dummy_sign_set = 0
|
||||
endif
|
||||
" Remove the dummy sign now we've updated the signs, unless we want
|
||||
" to keep it, which will keep the sign column open even when there are
|
||||
" no warnings or errors.
|
||||
if l:dummy_sign_set && !g:ale_sign_column_always
|
||||
execute 'sign unplace ' . g:ale_sign_offset . ' buffer=' . a:buffer
|
||||
endif
|
||||
endfunction
|
||||
|
Loading…
Reference in New Issue
Block a user