aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/quickfix.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-11-12 00:24:25 -0500
committerJustin M. Keyes <justinkz@gmail.com>2019-11-11 21:24:25 -0800
commit8d70335b00484055fba6e3c1e1bb90acef0bb1ae (patch)
treebd35a5b2a7c08b219328f325970534af00503f52 /src/nvim/quickfix.c
parent122426966e1046f45801103eace2887ea59d4941 (diff)
downloadrneovim-8d70335b00484055fba6e3c1e1bb90acef0bb1ae.tar.gz
rneovim-8d70335b00484055fba6e3c1e1bb90acef0bb1ae.tar.bz2
rneovim-8d70335b00484055fba6e3c1e1bb90acef0bb1ae.zip
vim-patch:8.1.0622: adding quickfix items marks items as valid errors #11373
Problem: Adding quickfix items marks items as valid errors. (Daniel Hahler) Solution: Check when items are valid. (Yegappan Lakshmanan, closes vim/vim#3683, closes vim/vim#3633) https://github.com/vim/vim/commit/9752c72f492312acd1c84e673864faed31a3bc97
Diffstat (limited to 'src/nvim/quickfix.c')
-rw-r--r--src/nvim/quickfix.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index da315252b5..276427f216 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -5779,11 +5779,13 @@ int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict)
}
/// Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the
-/// items in the dict 'd'.
+/// 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_list_T *qfl,
const dict_T *d,
- bool first_entry)
+ bool first_entry,
+ bool *valid_entry)
FUNC_ATTR_NONNULL_ALL
{
static bool did_bufnr_emsg;
@@ -5846,6 +5848,10 @@ static int qf_add_entry_from_dict(
xfree(pattern);
xfree(text);
+ if (valid) {
+ *valid_entry = true;
+ }
+
return status;
}
@@ -5857,6 +5863,7 @@ static int qf_add_entries(qf_info_T *qi, int qf_idx, list_T *list,
qf_list_T *qfl = qf_get_list(qi, qf_idx);
qfline_T *old_last = NULL;
int retval = OK;
+ bool valid_entry = false;
if (action == ' ' || qf_idx == qi->qf_listcount) {
// make place for a new list
@@ -5881,23 +5888,30 @@ static int qf_add_entries(qf_info_T *qi, int qf_idx, list_T *list,
continue;
}
- retval = qf_add_entry_from_dict(qfl, d, li == tv_list_first(list));
+ retval = qf_add_entry_from_dict(qfl, d, li == tv_list_first(list),
+ &valid_entry);
if (retval == QF_FAIL) {
break;
}
});
- if (qfl->qf_index == 0) {
- // no valid entry
- qfl->qf_nonevalid = true;
- } else {
+ // Check if any valid error entries are added to the list.
+ if (valid_entry) {
qfl->qf_nonevalid = false;
+ } else if (qfl->qf_index == 0) {
+ 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;
- if (!qf_list_empty(qfl)) {
- qfl->qf_index = 1;
- }
+ }
+
+ // 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(qfl)) {
+ qfl->qf_index = 1;
}
// Don't update the cursor in quickfix window when appending entries