mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #7747 from jamessan/vim-8.0.0565
vim-patch:8.0.0565,8.0.0574,8.0.0579,8.0.0580
This commit is contained in:
@@ -6841,6 +6841,7 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
||||
nr error number
|
||||
text description of the error
|
||||
type single-character error type, 'E', 'W', etc.
|
||||
valid recognized error message
|
||||
|
||||
The "col", "vcol", "nr", "type" and "text" entries are
|
||||
optional. Either "lnum" or "pattern" entry can be used to
|
||||
@@ -6850,6 +6851,8 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
||||
item will not be handled as an error line.
|
||||
If both "pattern" and "lnum" are present then "pattern" will
|
||||
be used.
|
||||
If the "valid" entry is not supplied, then the valid flag is
|
||||
set when "bufnr" is a valid buffer or "filename" exists.
|
||||
If you supply an empty {list}, the quickfix list will be
|
||||
cleared.
|
||||
Note that the list is not exactly the same as what
|
||||
|
||||
@@ -2411,11 +2411,18 @@ static void qf_free(qf_info_T *qi, int idx)
|
||||
qi->qf_lists[idx].qf_ptr = NULL;
|
||||
qi->qf_lists[idx].qf_title = NULL;
|
||||
qi->qf_lists[idx].qf_index = 0;
|
||||
qi->qf_lists[idx].qf_start = NULL;
|
||||
qi->qf_lists[idx].qf_last = NULL;
|
||||
qi->qf_lists[idx].qf_ptr = NULL;
|
||||
qi->qf_lists[idx].qf_nonevalid = true;
|
||||
|
||||
qf_clean_dir_stack(&qi->qf_dir_stack);
|
||||
qi->qf_directory = NULL;
|
||||
qf_clean_dir_stack(&qi->qf_file_stack);
|
||||
qi->qf_currfile = NULL;
|
||||
qi->qf_multiline = false;
|
||||
qi->qf_multiignore = false;
|
||||
qi->qf_multiscan = false;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -4182,6 +4189,11 @@ static int qf_add_entries(qf_info_T *qi, list_T *list, char_u *title,
|
||||
bufnum = 0;
|
||||
}
|
||||
|
||||
// If the 'valid' field is present it overrules the detected value.
|
||||
if (tv_dict_find(d, "valid", -1) != NULL) {
|
||||
valid = (int)tv_dict_get_number(d, "valid");
|
||||
}
|
||||
|
||||
int status = qf_add_entry(qi,
|
||||
NULL, // dir
|
||||
(char_u *)filename,
|
||||
|
||||
@@ -24,8 +24,8 @@ func s:setup_commands(cchar)
|
||||
command! -nargs=* Xgetbuffer <mods>cgetbuffer <args>
|
||||
command! -nargs=* Xaddbuffer <mods>caddbuffer <args>
|
||||
command! -nargs=* Xrewind <mods>crewind <args>
|
||||
command! -nargs=* -bang Xnext <mods>cnext<bang> <args>
|
||||
command! -nargs=* -bang Xprev <mods>cprev<bang> <args>
|
||||
command! -count -nargs=* -bang Xnext <mods><count>cnext<bang> <args>
|
||||
command! -count -nargs=* -bang Xprev <mods><count>cprev<bang> <args>
|
||||
command! -nargs=* -bang Xfirst <mods>cfirst<bang> <args>
|
||||
command! -nargs=* -bang Xlast <mods>clast<bang> <args>
|
||||
command! -nargs=* -bang Xnfile <mods>cnfile<bang> <args>
|
||||
@@ -56,8 +56,8 @@ func s:setup_commands(cchar)
|
||||
command! -nargs=* Xgetbuffer <mods>lgetbuffer <args>
|
||||
command! -nargs=* Xaddbuffer <mods>laddbuffer <args>
|
||||
command! -nargs=* Xrewind <mods>lrewind <args>
|
||||
command! -nargs=* -bang Xnext <mods>lnext<bang> <args>
|
||||
command! -nargs=* -bang Xprev <mods>lprev<bang> <args>
|
||||
command! -count -nargs=* -bang Xnext <mods><count>lnext<bang> <args>
|
||||
command! -count -nargs=* -bang Xprev <mods><count>lprev<bang> <args>
|
||||
command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args>
|
||||
command! -nargs=* -bang Xlast <mods>llast<bang> <args>
|
||||
command! -nargs=* -bang Xnfile <mods>lnfile<bang> <args>
|
||||
@@ -395,7 +395,9 @@ func Xtest_browse(cchar)
|
||||
Xgetexpr ['Xqftestfile1:5:Line5',
|
||||
\ 'Xqftestfile1:6:Line6',
|
||||
\ 'Xqftestfile2:10:Line10',
|
||||
\ 'Xqftestfile2:11:Line11']
|
||||
\ 'Xqftestfile2:11:Line11',
|
||||
\ 'RegularLine1',
|
||||
\ 'RegularLine2']
|
||||
|
||||
Xfirst
|
||||
call assert_fails('Xprev', 'E553')
|
||||
@@ -407,6 +409,7 @@ func Xtest_browse(cchar)
|
||||
call assert_equal('Xqftestfile1', bufname('%'))
|
||||
call assert_equal(6, line('.'))
|
||||
Xlast
|
||||
Xprev
|
||||
call assert_equal('Xqftestfile2', bufname('%'))
|
||||
call assert_equal(11, line('.'))
|
||||
call assert_fails('Xnext', 'E553')
|
||||
@@ -415,6 +418,13 @@ func Xtest_browse(cchar)
|
||||
call assert_equal('Xqftestfile1', bufname('%'))
|
||||
call assert_equal(5, line('.'))
|
||||
|
||||
10Xnext
|
||||
call assert_equal('Xqftestfile2', bufname('%'))
|
||||
call assert_equal(11, line('.'))
|
||||
10Xprev
|
||||
call assert_equal('Xqftestfile1', bufname('%'))
|
||||
call assert_equal(5, line('.'))
|
||||
|
||||
Xexpr ""
|
||||
call assert_fails('Xnext', 'E42:')
|
||||
|
||||
@@ -437,9 +447,30 @@ func s:test_xhelpgrep(cchar)
|
||||
let title_text = ':lhelpgrep quickfix'
|
||||
endif
|
||||
call assert_true(w:quickfix_title =~ title_text, w:quickfix_title)
|
||||
|
||||
" Jumping to a help topic should open the help window
|
||||
only
|
||||
Xnext
|
||||
call assert_true(&buftype == 'help')
|
||||
call assert_true(winnr('$') == 2)
|
||||
" Jumping to the next match should reuse the help window
|
||||
Xnext
|
||||
call assert_true(&buftype == 'help')
|
||||
call assert_true(winnr() == 1)
|
||||
call assert_true(winnr('$') == 2)
|
||||
" Jumping to the next match from the quickfix window should reuse the help
|
||||
" window
|
||||
Xopen
|
||||
Xnext
|
||||
call assert_true(&buftype == 'help')
|
||||
call assert_true(winnr() == 1)
|
||||
call assert_true(winnr('$') == 2)
|
||||
|
||||
" This wipes out the buffer, make sure that doesn't cause trouble.
|
||||
Xclose
|
||||
|
||||
new | only
|
||||
|
||||
" Search for non existing help string
|
||||
call assert_fails('Xhelpgrep a1b2c3', 'E480:')
|
||||
endfunc
|
||||
@@ -578,10 +609,7 @@ func Test_locationlist()
|
||||
lrewind
|
||||
enew
|
||||
lopen
|
||||
lnext
|
||||
lnext
|
||||
lnext
|
||||
lnext
|
||||
4lnext
|
||||
vert split
|
||||
wincmd L
|
||||
lopen
|
||||
@@ -1039,6 +1067,25 @@ func Test_efm2()
|
||||
call assert_equal(1, l[4].valid)
|
||||
call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr))
|
||||
|
||||
" The following sequence of commands used to crash Vim
|
||||
set efm=%W%m
|
||||
cgetexpr ['msg1']
|
||||
let l = getqflist()
|
||||
call assert_equal(1, len(l), string(l))
|
||||
call assert_equal('msg1', l[0].text)
|
||||
set efm=%C%m
|
||||
lexpr 'msg2'
|
||||
let l = getloclist(0)
|
||||
call assert_equal(1, len(l), string(l))
|
||||
call assert_equal('msg2', l[0].text)
|
||||
lopen
|
||||
call setqflist([], 'r')
|
||||
caddbuf
|
||||
let l = getqflist()
|
||||
call assert_equal(1, len(l), string(l))
|
||||
call assert_equal('|| msg2', l[0].text)
|
||||
|
||||
new | only
|
||||
let &efm = save_efm
|
||||
endfunc
|
||||
|
||||
@@ -1136,6 +1183,25 @@ func SetXlistTests(cchar, bnum)
|
||||
let l = g:Xgetlist()
|
||||
call assert_equal(0, len(l))
|
||||
|
||||
" Tests for setting the 'valid' flag
|
||||
call g:Xsetlist([{'bufnr':a:bnum, 'lnum':4, 'valid':0}])
|
||||
Xwindow
|
||||
call assert_equal(1, winnr('$'))
|
||||
let l = g:Xgetlist()
|
||||
call g:Xsetlist(l)
|
||||
call assert_equal(0, g:Xgetlist()[0].valid)
|
||||
call g:Xsetlist([{'text':'Text1', 'valid':1}])
|
||||
Xwindow
|
||||
call assert_equal(2, winnr('$'))
|
||||
Xclose
|
||||
let save_efm = &efm
|
||||
set efm=%m
|
||||
Xgetexpr 'TestMessage'
|
||||
let l = g:Xgetlist()
|
||||
call g:Xsetlist(l)
|
||||
call assert_equal(1, g:Xgetlist()[0].valid)
|
||||
let &efm = save_efm
|
||||
|
||||
" Error cases:
|
||||
" Refer to a non-existing buffer and pass a non-dictionary type
|
||||
call assert_fails("call g:Xsetlist([{'bufnr':998, 'lnum':4}," .
|
||||
@@ -1369,18 +1435,18 @@ func Test_switchbuf()
|
||||
let winid = win_getid()
|
||||
cfirst | cnext
|
||||
call assert_equal(winid, win_getid())
|
||||
cnext | cnext
|
||||
2cnext
|
||||
call assert_equal(winid, win_getid())
|
||||
cnext | cnext
|
||||
2cnext
|
||||
call assert_equal(winid, win_getid())
|
||||
enew
|
||||
|
||||
set switchbuf=useopen
|
||||
cfirst | cnext
|
||||
call assert_equal(file1_winid, win_getid())
|
||||
cnext | cnext
|
||||
2cnext
|
||||
call assert_equal(file2_winid, win_getid())
|
||||
cnext | cnext
|
||||
2cnext
|
||||
call assert_equal(file2_winid, win_getid())
|
||||
|
||||
enew | only
|
||||
@@ -1390,9 +1456,9 @@ func Test_switchbuf()
|
||||
tabfirst
|
||||
cfirst | cnext
|
||||
call assert_equal(2, tabpagenr())
|
||||
cnext | cnext
|
||||
2cnext
|
||||
call assert_equal(3, tabpagenr())
|
||||
cnext | cnext
|
||||
2cnext
|
||||
call assert_equal(3, tabpagenr())
|
||||
tabfirst | tabonly | enew
|
||||
|
||||
|
||||
Reference in New Issue
Block a user