#333 Keep any loclist items which have match_id values set on them
This commit is contained in:
parent
5836d9a9a7
commit
d19a35485f
@ -34,17 +34,35 @@ function! s:GetALEMatches() abort
|
|||||||
return l:list
|
return l:list
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetCurrentMatchIDs(loclist) abort
|
||||||
|
let l:current_id_map = {}
|
||||||
|
|
||||||
|
for l:item in a:loclist
|
||||||
|
if has_key(l:item, 'match_id')
|
||||||
|
let l:current_id_map[l:item.match_id] = 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:current_id_map
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#highlight#UpdateHighlights() abort
|
function! ale#highlight#UpdateHighlights() abort
|
||||||
let l:buffer = bufnr('%')
|
let l:buffer = bufnr('%')
|
||||||
let l:has_new_items = has_key(s:buffer_highlights, l:buffer)
|
let l:has_new_items = has_key(s:buffer_highlights, l:buffer)
|
||||||
let l:loclist = l:has_new_items ? remove(s:buffer_highlights, l:buffer) : []
|
let l:loclist = l:has_new_items ? remove(s:buffer_highlights, l:buffer) : []
|
||||||
|
let l:current_id_map = s:GetCurrentMatchIDs(l:loclist)
|
||||||
|
|
||||||
if l:has_new_items || !g:ale_enabled
|
if l:has_new_items || !g:ale_enabled
|
||||||
for l:match in s:GetALEMatches()
|
for l:match in s:GetALEMatches()
|
||||||
call matchdelete(l:match['id'])
|
if !has_key(l:current_id_map, l:match.id)
|
||||||
|
call matchdelete(l:match.id)
|
||||||
|
endif
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Remove anything with a current match_id
|
||||||
|
call filter(l:loclist, '!has_key(v:val, ''match_id'')')
|
||||||
|
|
||||||
if l:has_new_items
|
if l:has_new_items
|
||||||
for l:item in l:loclist
|
for l:item in l:loclist
|
||||||
let l:col = l:item.col
|
let l:col = l:item.col
|
||||||
|
@ -33,11 +33,13 @@ After:
|
|||||||
delfunction GenerateResults
|
delfunction GenerateResults
|
||||||
call ale#linter#Reset()
|
call ale#linter#Reset()
|
||||||
let g:ale_buffer_info = {}
|
let g:ale_buffer_info = {}
|
||||||
|
call clearmatches()
|
||||||
|
|
||||||
Given testft(A Javscript file with warnings/errors):
|
Given testft(A Javscript file with warnings/errors):
|
||||||
foo
|
foo
|
||||||
bar
|
bar
|
||||||
baz wat
|
baz wat
|
||||||
|
line four
|
||||||
|
|
||||||
Execute(Highlights should be set when a linter runs):
|
Execute(Highlights should be set when a linter runs):
|
||||||
call ale#Lint()
|
call ale#Lint()
|
||||||
@ -52,3 +54,23 @@ Execute(Highlights should be set when a linter runs):
|
|||||||
\ getmatches()
|
\ getmatches()
|
||||||
|
|
||||||
AssertEqual [4, 5, 6], map(copy(g:ale_buffer_info[bufnr('')].loclist), 'v:val.match_id')
|
AssertEqual [4, 5, 6], map(copy(g:ale_buffer_info[bufnr('')].loclist), 'v:val.match_id')
|
||||||
|
|
||||||
|
Execute(Existing highlights should be kept):
|
||||||
|
call matchaddpos('ALEError', [[1, 2, 1]], 10, 347)
|
||||||
|
call matchaddpos('ALEWarning', [[2, 2, 1]], 10, 348)
|
||||||
|
|
||||||
|
call ale#highlight#SetHighlights(bufnr('%'), [
|
||||||
|
\ {'bufnr': bufnr('%'), 'match_id': 347, 'type': 'E', 'lnum': 1, 'col': 2},
|
||||||
|
\ {'bufnr': bufnr('%'), 'match_id': 348, 'type': 'W', 'lnum': 2, 'col': 2},
|
||||||
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2},
|
||||||
|
\ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 4, 'col': 1},
|
||||||
|
\])
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {'group': 'ALEError', 'id': 347, 'priority': 10, 'pos1': [1, 2, 1]},
|
||||||
|
\ {'group': 'ALEWarning', 'id': 348, 'priority': 10, 'pos1': [2, 2, 1]},
|
||||||
|
\ {'group': 'ALEError', 'id': 7, 'priority': 10, 'pos1': [3, 2, 1]},
|
||||||
|
\ {'group': 'ALEWarning', 'id': 8, 'priority': 10, 'pos1': [4, 1, 1]},
|
||||||
|
\ ],
|
||||||
|
\ getmatches()
|
||||||
|
Loading…
Reference in New Issue
Block a user