diff --git a/autoload/ale/list.vim b/autoload/ale/list.vim index 63d51ab5..ea6d958c 100644 --- a/autoload/ale/list.vim +++ b/autoload/ale/list.vim @@ -12,18 +12,26 @@ function! ale#list#IsQuickfixOpen() abort endfunction function! ale#list#SetLists(buffer, loclist) abort + let l:title = expand('#' . a:buffer . ':p') + if g:ale_set_quickfix - call setqflist(a:loclist) + if has('nvim') + call setqflist(a:loclist, ' ', l:title) + else + call setqflist(a:loclist) + call setqflist([], 'r', {'title': l:title}) + endif elseif g:ale_set_loclist " If windows support is off, bufwinid() may not exist. - if exists('*bufwinid') - " Set the results on the window for the buffer. - call setloclist(bufwinid(str2nr(a:buffer)), a:loclist) + " We'll set result in the current window, which might not be correct, + " but is better than nothing. + let l:win_id = exists('*bufwinid') ? bufwinid(str2nr(a:buffer)) : 0 + + if has('nvim') + call setloclist(l:win_id, a:loclist, ' ', l:title) else - " Set the results in the current window. - " This may not be the same window we ran the linters for, but - " it's better than nothing. - call setloclist(0, a:loclist) + call setloclist(l:win_id, a:loclist) + call setloclist(l:win_id, [], 'r', {'title': l:title}) endif endif diff --git a/test/test_list_titles.vader b/test/test_list_titles.vader new file mode 100644 index 00000000..fe28629d --- /dev/null +++ b/test/test_list_titles.vader @@ -0,0 +1,63 @@ +Before: + Save g:ale_set_loclist + Save g:ale_set_quickfix + + let g:ale_set_loclist = 0 + let g:ale_set_quickfix = 0 + + silent! cd /testplugin/test + +After: + Restore + + call setloclist(0, []) + call setqflist([]) + +Execute(The loclist titles should be set appropriately): + silent noautocmd file foo + + let g:ale_set_loclist = 1 + + call ale#list#SetLists(bufnr(''), [ + \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x', 'type': 'E'}, + \]) + + AssertEqual [{ + \ 'lnum': 5, + \ 'bufnr': bufnr(''), + \ 'col': 5, + \ 'text': 'x', + \ 'valid': 1, + \ 'vcol': 0, + \ 'nr': 0, + \ 'type': 'E', + \ 'pattern': '', + \}], getloclist(0) + + if !has('nvim') + AssertEqual {'title': getcwd() . '/foo'}, getloclist(0, {'title': ''}) + endif + +Execute(The quickfix titles should be set appropriately): + silent noautocmd file foo + + let g:ale_set_quickfix = 1 + + call ale#list#SetLists(bufnr(''), [ + \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x', 'type': 'E'}, + \]) + AssertEqual [{ + \ 'lnum': 5, + \ 'bufnr': bufnr(''), + \ 'col': 5, + \ 'text': 'x', + \ 'valid': 1, + \ 'vcol': 0, + \ 'nr': 0, + \ 'type': 'E', + \ 'pattern': '', + \}], getqflist() + + if !has('nvim') + AssertEqual {'title': getcwd() . '/foo'}, getqflist({'title': ''}) + endif