diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-08-28 22:07:44 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-08-28 22:07:44 +0200 |
commit | 6f6ef7c1951b080843f3da049d3f5d0679de7348 (patch) | |
tree | 61371766624685a50ac851fe8850d43fef314204 /src | |
parent | a06afc7f5e7ba085abf1475a65ae3ea79c961a0e (diff) |
patch 8.1.0330: the qf_add_entries() function is too longv8.1.0330
Problem: The qf_add_entries() function is too long.
Solution: Split in two parts. (Yegappan Lakshmanan)
Diffstat (limited to 'src')
-rw-r--r-- | src/quickfix.c | 145 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 81 insertions, 66 deletions
diff --git a/src/quickfix.c b/src/quickfix.c index 6248c21e64..fe333766df 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -5997,6 +5997,83 @@ 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'. + */ + 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; + int bufnum, valid, status, col, vcol, nr; + long lnum; + + if (first_entry) + did_bufnr_emsg = FALSE; + + filename = get_dict_string(d, (char_u *)"filename", TRUE); + module = get_dict_string(d, (char_u *)"module", TRUE); + bufnum = (int)get_dict_number(d, (char_u *)"bufnr"); + lnum = (int)get_dict_number(d, (char_u *)"lnum"); + col = (int)get_dict_number(d, (char_u *)"col"); + vcol = (int)get_dict_number(d, (char_u *)"vcol"); + nr = (int)get_dict_number(d, (char_u *)"nr"); + type = get_dict_string(d, (char_u *)"type", TRUE); + pattern = get_dict_string(d, (char_u *)"pattern", TRUE); + text = get_dict_string(d, (char_u *)"text", TRUE); + if (text == NULL) + text = vim_strsave((char_u *)""); + + valid = TRUE; + if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL)) + valid = FALSE; + + // Mark entries with non-existing buffer number as not valid. Give the + // error message only once. + if (bufnum != 0 && (buflist_findnr(bufnum) == NULL)) + { + if (!did_bufnr_emsg) + { + did_bufnr_emsg = TRUE; + EMSGN(_("E92: Buffer %ld not found"), bufnum); + } + valid = FALSE; + bufnum = 0; + } + + // If the 'valid' field is present it overrules the detected value. + if ((dict_find(d, (char_u *)"valid", -1)) != NULL) + valid = (int)get_dict_number(d, (char_u *)"valid"); + + status = qf_add_entry(qi, + qf_idx, + NULL, // dir + filename, + module, + bufnum, + text, + lnum, + col, + vcol, // vis_col + pattern, // search pattern + nr, + type == NULL ? NUL : *type, + valid); + + vim_free(filename); + vim_free(module); + vim_free(pattern); + vim_free(text); + vim_free(type); + + return status; +} + +/* * Add list of entries to quickfix/location list. Each list entry is * a dictionary with item information. */ @@ -6010,15 +6087,8 @@ qf_add_entries( { listitem_T *li; dict_T *d; - char_u *filename, *module, *pattern, *text, *type; - int bufnum; - long lnum; - int col, nr; - int vcol; qfline_T *old_last = NULL; - int valid, status; int retval = OK; - int did_bufnr_emsg = FALSE; if (action == ' ' || qf_idx == qi->qf_listcount) { @@ -6044,66 +6114,9 @@ qf_add_entries( if (d == NULL) continue; - filename = get_dict_string(d, (char_u *)"filename", TRUE); - module = get_dict_string(d, (char_u *)"module", TRUE); - bufnum = (int)get_dict_number(d, (char_u *)"bufnr"); - lnum = (int)get_dict_number(d, (char_u *)"lnum"); - col = (int)get_dict_number(d, (char_u *)"col"); - vcol = (int)get_dict_number(d, (char_u *)"vcol"); - nr = (int)get_dict_number(d, (char_u *)"nr"); - type = get_dict_string(d, (char_u *)"type", TRUE); - pattern = get_dict_string(d, (char_u *)"pattern", TRUE); - text = get_dict_string(d, (char_u *)"text", TRUE); - if (text == NULL) - text = vim_strsave((char_u *)""); - - valid = TRUE; - if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL)) - valid = FALSE; - - /* Mark entries with non-existing buffer number as not valid. Give the - * error message only once. */ - if (bufnum != 0 && (buflist_findnr(bufnum) == NULL)) - { - if (!did_bufnr_emsg) - { - did_bufnr_emsg = TRUE; - EMSGN(_("E92: Buffer %ld not found"), bufnum); - } - valid = FALSE; - bufnum = 0; - } - - /* If the 'valid' field is present it overrules the detected value. */ - if ((dict_find(d, (char_u *)"valid", -1)) != NULL) - valid = (int)get_dict_number(d, (char_u *)"valid"); - - status = qf_add_entry(qi, - qf_idx, - NULL, /* dir */ - filename, - module, - bufnum, - text, - lnum, - col, - vcol, /* vis_col */ - pattern, /* search pattern */ - nr, - type == NULL ? NUL : *type, - valid); - - vim_free(filename); - vim_free(module); - vim_free(pattern); - vim_free(text); - vim_free(type); - - if (status == FAIL) - { - retval = FAIL; + retval = qf_add_entry_from_dict(qi, qf_idx, d, li == list->lv_first); + if (retval == FAIL) break; - } } if (qi->qf_lists[qf_idx].qf_index == 0) diff --git a/src/version.c b/src/version.c index 26b6888c78..f02b9f9967 100644 --- a/src/version.c +++ b/src/version.c @@ -795,6 +795,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 330, +/**/ 329, /**/ 328, |