Patch 8.1.0622
Problem: Adding quickfix items marks items as valid errors. (Daniel Hahler)
Solution: Check when items are valid. (Yegappan Lakshmanan, closes #3683,
closes #3633)
Files: src/quickfix.c, src/testdir/test_quickfix.vim
*** ../vim-8.1.0621/src/quickfix.c 2018-12-14 15:38:28.331597637 +0100
--- src/quickfix.c 2018-12-22 16:42:35.335504536 +0100
***************
*** 6241,6254 ****
/*
* Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the
! * items in the dict 'd'.
*/
static int
qf_add_entry_from_dict(
qf_info_T *qi,
int qf_idx,
dict_T *d,
! int first_entry)
{
static int did_bufnr_emsg;
char_u *filename, *module, *pattern, *text, *type;
--- 6241,6256 ----
/*
* Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the
! * items in the dict 'd'. If it is a valid error entry, then set 'valid_entry'
! * to TRUE.
*/
static int
qf_add_entry_from_dict(
qf_info_T *qi,
int qf_idx,
dict_T *d,
! int first_entry,
! int *valid_entry)
{
static int did_bufnr_emsg;
char_u *filename, *module, *pattern, *text, *type;
***************
*** 6313,6318 ****
--- 6315,6323 ----
vim_free(text);
vim_free(type);
+ if (valid)
+ *valid_entry = TRUE;
+
return status;
}
***************
*** 6333,6338 ****
--- 6338,6344 ----
dict_T *d;
qfline_T *old_last = NULL;
int retval = OK;
+ int valid_entry = FALSE;
if (action == ' ' || qf_idx == qi->qf_listcount)
{
***************
*** 6359,6380 ****
if (d == NULL)
continue;
! retval = qf_add_entry_from_dict(qi, qf_idx, d, li == list->lv_first);
if (retval == FAIL)
break;
}
! if (qfl->qf_index == 0)
// no valid entry
qfl->qf_nonevalid = TRUE;
! else
! qfl->qf_nonevalid = FALSE;
if (action != 'a')
- {
qfl->qf_ptr = qfl->qf_start;
! if (!qf_list_empty(qi, qf_idx))
! qfl->qf_index = 1;
! }
// Don't update the cursor in quickfix window when appending entries
qf_update_buffer(qi, old_last);
--- 6365,6391 ----
if (d == NULL)
continue;
! retval = qf_add_entry_from_dict(qi, qf_idx, d, li == list->lv_first,
! &valid_entry);
if (retval == FAIL)
break;
}
! // Check if any valid error entries are added to the list.
! if (valid_entry)
! qfl->qf_nonevalid = FALSE;
! else if (qfl->qf_index == 0)
// no valid entry
qfl->qf_nonevalid = TRUE;
!
! // If not appending to the list, set the current error to the first entry
if (action != 'a')
qfl->qf_ptr = qfl->qf_start;
!
! // Update the current error index if not appending to the list or if the
! // list was empty before and it is not empty now.
! if ((action != 'a' || qfl->qf_index == 0) && !qf_list_empty(qi, qf_idx))
! qfl->qf_index = 1;
// Don't update the cursor in quickfix window when appending entries
qf_update_buffer(qi, old_last);
*** ../vim-8.1.0621/src/testdir/test_quickfix.vim 2018-11-11
22:50:20.810297803 +0100
--- src/testdir/test_quickfix.vim 2018-12-22 16:42:35.335504536 +0100
***************
*** 1299,1304 ****
--- 1299,1326 ----
let l = g:Xgetlist()
call g:Xsetlist(l)
call assert_equal(0, g:Xgetlist()[0].valid)
+ " Adding a non-valid entry should not mark the list as having valid entries
+ call g:Xsetlist([{'bufnr':a:bnum, 'lnum':5, 'valid':0}], 'a')
+ Xwindow
+ call assert_equal(1, winnr('$'))
+
+ " :cnext/:cprev should still work even with invalid entries in the list
+ let l = [{'bufnr' : a:bnum, 'lnum' : 1, 'text' : '1', 'valid' : 0},
+ \ {'bufnr' : a:bnum, 'lnum' : 2, 'text' : '2', 'valid' : 0}]
+ call g:Xsetlist(l)
+ Xnext
+ call assert_equal(2, g:Xgetlist({'idx' : 0}).idx)
+ Xprev
+ call assert_equal(1, g:Xgetlist({'idx' : 0}).idx)
+ " :cnext/:cprev should still work after appending invalid entries to an
+ " empty list
+ call g:Xsetlist([])
+ call g:Xsetlist(l, 'a')
+ Xnext
+ call assert_equal(2, g:Xgetlist({'idx' : 0}).idx)
+ Xprev
+ call assert_equal(1, g:Xgetlist({'idx' : 0}).idx)
+
call g:Xsetlist([{'text':'Text1', 'valid':1}])
Xwindow
call assert_equal(2, winnr('$'))
*** ../vim-8.1.0621/src/version.c 2018-12-22 15:14:45.587283340 +0100
--- src/version.c 2018-12-22 16:45:12.206329187 +0100
***************
*** 801,802 ****
--- 801,804 ----
{ /* Add new patch number below this line */
+ /**/
+ 622,
/**/
--
The users that I support would double-click on a landmine to find out
what happens. -- A system administrator
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.