#653 - Filter out other buffers for loclist jumping
This commit is contained in:
parent
b6f0b17eaf
commit
c6d11f4281
@ -10,15 +10,19 @@
|
|||||||
" List will be returned, otherwise a pair of [line_number, column_number] will
|
" List will be returned, otherwise a pair of [line_number, column_number] will
|
||||||
" be returned.
|
" be returned.
|
||||||
function! ale#loclist_jumping#FindNearest(direction, wrap) abort
|
function! ale#loclist_jumping#FindNearest(direction, wrap) abort
|
||||||
|
let l:buffer = bufnr('')
|
||||||
let l:pos = getcurpos()
|
let l:pos = getcurpos()
|
||||||
let l:info = get(g:ale_buffer_info, bufnr('%'), {'loclist': []})
|
let l:info = get(g:ale_buffer_info, bufnr('%'), {'loclist': []})
|
||||||
" This list will have already been sorted.
|
" This list will have already been sorted.
|
||||||
let l:loclist = l:info.loclist
|
let l:loclist = l:info.loclist
|
||||||
let l:search_item = {'bufnr': bufnr(''), 'lnum': l:pos[1], 'col': l:pos[2]}
|
let l:search_item = {'bufnr': l:buffer, 'lnum': l:pos[1], 'col': l:pos[2]}
|
||||||
|
|
||||||
|
" Copy the List and filter it to only items in this buffer.
|
||||||
|
let l:loclist = filter(copy(l:loclist), 'v:val.bufnr == l:buffer')
|
||||||
|
|
||||||
" When searching backwards, so we can find the next smallest match.
|
" When searching backwards, so we can find the next smallest match.
|
||||||
if a:direction is# 'before'
|
if a:direction is# 'before'
|
||||||
let l:loclist = reverse(copy(l:loclist))
|
let l:loclist = reverse(l:loclist)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Look for items before or after the current position.
|
" Look for items before or after the current position.
|
||||||
@ -30,9 +34,12 @@ function! ale#loclist_jumping#FindNearest(direction, wrap) abort
|
|||||||
" cursor to a line without changing the column, in some cases.
|
" cursor to a line without changing the column, in some cases.
|
||||||
let l:cmp_value = ale#util#LocItemCompare(
|
let l:cmp_value = ale#util#LocItemCompare(
|
||||||
\ {
|
\ {
|
||||||
\ 'bufnr': bufnr(''),
|
\ 'bufnr': l:buffer,
|
||||||
\ 'lnum': l:item.lnum,
|
\ 'lnum': l:item.lnum,
|
||||||
\ 'col': min([max([l:item.col, 1]), max([len(getline(l:item.lnum)), 1])]),
|
\ 'col': min([
|
||||||
|
\ max([l:item.col, 1]),
|
||||||
|
\ max([len(getline(l:item.lnum)), 1]),
|
||||||
|
\ ]),
|
||||||
\ },
|
\ },
|
||||||
\ l:search_item
|
\ l:search_item
|
||||||
\)
|
\)
|
||||||
@ -67,13 +74,17 @@ function! ale#loclist_jumping#Jump(direction, wrap) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#loclist_jumping#JumpToIndex(index) abort
|
function! ale#loclist_jumping#JumpToIndex(index) abort
|
||||||
let l:info = get(g:ale_buffer_info, bufnr('%'), {'loclist': []})
|
let l:buffer = bufnr('')
|
||||||
|
let l:info = get(g:ale_buffer_info, l:buffer, {'loclist': []})
|
||||||
let l:loclist = l:info.loclist
|
let l:loclist = l:info.loclist
|
||||||
|
let l:loclist = filter(copy(l:loclist), 'v:val.bufnr == l:buffer')
|
||||||
|
|
||||||
if empty(l:loclist)
|
if empty(l:loclist)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:item = l:loclist[a:index]
|
let l:item = l:loclist[a:index]
|
||||||
|
|
||||||
if !empty(l:item)
|
if !empty(l:item)
|
||||||
call cursor([l:item.lnum, l:item.col])
|
call cursor([l:item.lnum, l:item.col])
|
||||||
endif
|
endif
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
Before:
|
Before:
|
||||||
let g:ale_buffer_info = {
|
let g:ale_buffer_info = {
|
||||||
\ bufnr('%'): {
|
\ bufnr(''): {
|
||||||
\ 'loclist': [
|
\ 'loclist': [
|
||||||
|
\ {'bufnr': bufnr('') - 1, 'lnum': 3, 'col': 2},
|
||||||
\ {'bufnr': bufnr(''), 'lnum': 1, 'col': 2},
|
\ {'bufnr': bufnr(''), 'lnum': 1, 'col': 2},
|
||||||
\ {'bufnr': bufnr(''), 'lnum': 1, 'col': 3},
|
\ {'bufnr': bufnr(''), 'lnum': 1, 'col': 3},
|
||||||
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1},
|
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1},
|
||||||
@ -9,6 +10,7 @@ Before:
|
|||||||
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 3},
|
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 3},
|
||||||
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 6},
|
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 6},
|
||||||
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 700},
|
\ {'bufnr': bufnr(''), 'lnum': 2, 'col': 700},
|
||||||
|
\ {'bufnr': bufnr('') + 1, 'lnum': 3, 'col': 2},
|
||||||
\ ],
|
\ ],
|
||||||
\ },
|
\ },
|
||||||
\}
|
\}
|
||||||
@ -33,7 +35,6 @@ Given foobar (Some imaginary filetype):
|
|||||||
12345678
|
12345678
|
||||||
12345678
|
12345678
|
||||||
|
|
||||||
|
|
||||||
Execute(loclist jumping should jump correctly when not wrapping):
|
Execute(loclist jumping should jump correctly when not wrapping):
|
||||||
AssertEqual [2, 1], TestJump('before', 0, [2, 2])
|
AssertEqual [2, 1], TestJump('before', 0, [2, 2])
|
||||||
AssertEqual [1, 3], TestJump('before', 0, [2, 1])
|
AssertEqual [1, 3], TestJump('before', 0, [2, 1])
|
||||||
@ -77,6 +78,9 @@ Execute(We shouldn't move when jumping to the first item where there are none):
|
|||||||
AssertEqual [1, 6], TestJump(0, 0, [1, 6])
|
AssertEqual [1, 6], TestJump(0, 0, [1, 6])
|
||||||
|
|
||||||
Execute(We should be able to jump when the error line is blank):
|
Execute(We should be able to jump when the error line is blank):
|
||||||
|
" Add a blank line at the end.
|
||||||
|
call setline(1, getline('.', '$') + [''])
|
||||||
|
" Add a problem on the blank line.
|
||||||
call add(g:ale_buffer_info[bufnr('%')].loclist, {'bufnr': bufnr(''), 'lnum': 3, 'col': 1})
|
call add(g:ale_buffer_info[bufnr('%')].loclist, {'bufnr': bufnr(''), 'lnum': 3, 'col': 1})
|
||||||
|
|
||||||
AssertEqual 0, len(getline(3))
|
AssertEqual 0, len(getline(3))
|
||||||
|
Loading…
Reference in New Issue
Block a user