diff options
| -rw-r--r-- | runtime/doc/eval.txt | 3 | ||||
| -rw-r--r-- | src/nvim/quickfix.c | 5 | ||||
| -rw-r--r-- | src/nvim/testdir/test_quickfix.vim | 19 | 
3 files changed, 27 insertions, 0 deletions
| diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index efc8775d0a..0b50340dee 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -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 diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index ee3bb1dfba..d77cec4fd8 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -4189,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, diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index 7e4100cca0..dd64e37ce3 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -1183,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}," . | 
