vim-patch:8.0.1031: "text" argument for getqflist() is confusing

Problem:    "text" argument for getqflist() is confusing. (Lcd47)
Solution:   Use "lines" instead. (Yegappan Lakshmanan)
2c809b7c7d
This commit is contained in:
Jan Edmund Lazo 2018-09-08 11:19:55 -04:00
parent 1790f81f56
commit 213a66441f
3 changed files with 46 additions and 53 deletions

View File

@ -4339,14 +4339,13 @@ getqflist([{what}]) *getqflist()*
|quickfix-ID|; zero means the id for the |quickfix-ID|; zero means the id for the
current list or the list specifed by 'nr' current list or the list specifed by 'nr'
items quickfix list entries items quickfix list entries
lines use 'errorformat' to extract items from a list
of lines and return the resulting entries.
Only a |List| type is accepted. The current
quickfix list is not modified.
nr get information for this quickfix list; zero nr get information for this quickfix list; zero
means the current quickfix list and '$' means means the current quickfix list and '$' means
the last quickfix list the last quickfix list
text use 'errorformat' to extract items from the
text and return the resulting entries. The
value can be a string with one line or a list
with multiple lines. The current quickfix list
is not modified.
title get the list title title get the list title
winid get the |window-ID| (if opened) winid get the |window-ID| (if opened)
all all of the above quickfix properties all all of the above quickfix properties
@ -4374,6 +4373,7 @@ getqflist([{what}]) *getqflist()*
Examples: > Examples: >
:echo getqflist({'all': 1}) :echo getqflist({'all': 1})
:echo getqflist({'nr': 2, 'title': 1}) :echo getqflist({'nr': 2, 'title': 1})
:echo getqflist({'lines' : ["F1:10:L10"]})
< <
getreg([{regname} [, 1 [, {list}]]]) *getreg()* getreg([{regname} [, 1 [, {list}]]]) *getreg()*
@ -6928,13 +6928,12 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
argument is ignored. The following items can be specified in argument is ignored. The following items can be specified in
{what}: {what}:
context any Vim type can be stored as a context context any Vim type can be stored as a context
text use 'errorformat' to extract items from the
text and add the resulting entries to the
quickfix list {nr}. The value can be a string
with one line or a list with multiple lines.
id quickfix list identifier |quickfix-ID| id quickfix list identifier |quickfix-ID|
items list of quickfix entries. Same as the {list} items list of quickfix entries. Same as the {list}
argument. argument.
lines use 'errorformat' to parse a list of lines and
add the resulting entries to the quickfix list
{nr} or {id}. Only a |List| value is supported.
nr list number in the quickfix stack; zero nr list number in the quickfix stack; zero
means the current quickfix list and '$' means means the current quickfix list and '$' means
the last quickfix list the last quickfix list
@ -6948,8 +6947,9 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
specify the list. specify the list.
Examples: > Examples: >
:call setqflist([], 'r', {'title': 'My search'}) :call setqflist([], 'r', {'title': 'My search'})
:call setqflist([], 'r', {'nr': 2, 'title': 'Errors'}) :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
:call setqflist([], 'a', {'id':myid, 'lines':["F1:10:L10"]})
< <
Returns zero for success, -1 for failure. Returns zero for success, -1 for failure.

View File

@ -4122,15 +4122,12 @@ enum {
}; };
// Parse text from 'di' and return the quickfix list items // Parse text from 'di' and return the quickfix list items
static int qf_get_list_from_text(dictitem_T *di, dict_T *retdict) static int qf_get_list_from_lines(dictitem_T *di, dict_T *retdict)
{ {
int status = FAIL; int status = FAIL;
// Only string and list values are supported // Only a List value is supported
if ((di->di_tv.v_type == VAR_STRING if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL) {
&& di->di_tv.vval.v_string != NULL)
|| (di->di_tv.v_type == VAR_LIST
&& di->di_tv.vval.v_list != NULL)) {
list_T *l = tv_list_alloc(kListLenMayKnow); list_T *l = tv_list_alloc(kListLenMayKnow);
qf_info_T *qi = xmalloc(sizeof(*qi)); qf_info_T *qi = xmalloc(sizeof(*qi));
memset(qi, 0, sizeof(*qi)); memset(qi, 0, sizeof(*qi));
@ -4158,8 +4155,8 @@ int get_errorlist_properties(win_T *wp, dict_T *what, dict_T *retdict)
qf_info_T *qi = &ql_info; qf_info_T *qi = &ql_info;
dictitem_T *di; dictitem_T *di;
if ((di = tv_dict_find(what, S_LEN("text"))) != NULL) { if ((di = tv_dict_find(what, S_LEN("lines"))) != NULL) {
return qf_get_list_from_text(di, retdict); return qf_get_list_from_lines(di, retdict);
} }
if (wp != NULL) { if (wp != NULL) {
@ -4474,12 +4471,9 @@ static int qf_set_properties(qf_info_T *qi, dict_T *what, int action,
} }
} }
if ((di = tv_dict_find(what, S_LEN("text"))) != NULL) { if ((di = tv_dict_find(what, S_LEN("lines"))) != NULL) {
// Only string and list values are supported // Only a List value is supported
if ((di->di_tv.v_type == VAR_STRING if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL) {
&& di->di_tv.vval.v_string != NULL)
|| (di->di_tv.v_type == VAR_LIST
&& di->di_tv.vval.v_list != NULL)) {
if (action == 'r') { if (action == 'r') {
qf_free_items(qi, qf_idx); qf_free_items(qi, qf_idx);
} }

View File

@ -2281,25 +2281,26 @@ func Xsetexpr_tests(cchar)
call s:setup_commands(a:cchar) call s:setup_commands(a:cchar)
let t = ["File1:10:Line10", "File1:20:Line20"] let t = ["File1:10:Line10", "File1:20:Line20"]
call g:Xsetlist([], ' ', {'text' : t}) call g:Xsetlist([], ' ', {'lines' : t})
call g:Xsetlist([], 'a', {'text' : "File1:30:Line30"}) call g:Xsetlist([], 'a', {'lines' : ["File1:30:Line30"]})
let l = g:Xgetlist() let l = g:Xgetlist()
call assert_equal(3, len(l)) call assert_equal(3, len(l))
call assert_equal(20, l[1].lnum) call assert_equal(20, l[1].lnum)
call assert_equal('Line30', l[2].text) call assert_equal('Line30', l[2].text)
call g:Xsetlist([], 'r', {'text' : "File2:5:Line5"}) call g:Xsetlist([], 'r', {'lines' : ["File2:5:Line5"]})
let l = g:Xgetlist() let l = g:Xgetlist()
call assert_equal(1, len(l)) call assert_equal(1, len(l))
call assert_equal('Line5', l[0].text) call assert_equal('Line5', l[0].text)
call assert_equal(-1, g:Xsetlist([], 'a', {'text' : 10})) call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : 10}))
call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : "F1:10:L10"}))
call g:Xsetlist([], 'f') call g:Xsetlist([], 'f')
" Add entries to multiple lists " Add entries to multiple lists
call g:Xsetlist([], 'a', {'nr' : 1, 'text' : ["File1:10:Line10"]}) call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:10:Line10"]})
call g:Xsetlist([], 'a', {'nr' : 2, 'text' : ["File2:20:Line20"]}) call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:20:Line20"]})
call g:Xsetlist([], 'a', {'nr' : 1, 'text' : ["File1:15:Line15"]}) call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:15:Line15"]})
call g:Xsetlist([], 'a', {'nr' : 2, 'text' : ["File2:25:Line25"]}) call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:25:Line25"]})
call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text) call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text)
call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text) call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text)
endfunc endfunc
@ -2316,10 +2317,10 @@ func Xmultidirstack_tests(cchar)
call g:Xsetlist([], 'f') call g:Xsetlist([], 'f')
Xexpr "" | Xexpr "" Xexpr "" | Xexpr ""
call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "Entering dir 'Xone/a'"}) call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["Entering dir 'Xone/a'"]})
call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "Entering dir 'Xtwo/a'"}) call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["Entering dir 'Xtwo/a'"]})
call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "one.txt:3:one one one"}) call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["one.txt:3:one one one"]})
call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "two.txt:5:two two two"}) call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["two.txt:5:two two two"]})
let l1 = g:Xgetlist({'nr':1, 'items':1}) let l1 = g:Xgetlist({'nr':1, 'items':1})
let l2 = g:Xgetlist({'nr':2, 'items':1}) let l2 = g:Xgetlist({'nr':2, 'items':1})
@ -2353,10 +2354,10 @@ func Xmultifilestack_tests(cchar)
call g:Xsetlist([], 'f') call g:Xsetlist([], 'f')
Xexpr "" | Xexpr "" Xexpr "" | Xexpr ""
call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "[one.txt]"}) call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["[one.txt]"]})
call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "[two.txt]"}) call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["[two.txt]"]})
call g:Xsetlist([], 'a', {'nr' : 1, 'text' : "(3,5) one one one"}) call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["(3,5) one one one"]})
call g:Xsetlist([], 'a', {'nr' : 2, 'text' : "(5,9) two two two"}) call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["(5,9) two two two"]})
let l1 = g:Xgetlist({'nr':1, 'items':1}) let l1 = g:Xgetlist({'nr':1, 'items':1})
let l2 = g:Xgetlist({'nr':2, 'items':1}) let l2 = g:Xgetlist({'nr':2, 'items':1})
@ -2505,28 +2506,26 @@ endfunc
" Test for getting the quickfix list items from some text without modifying " Test for getting the quickfix list items from some text without modifying
" the quickfix stack " the quickfix stack
func XgetListFromText(cchar) func XgetListFromLines(cchar)
call s:setup_commands(a:cchar) call s:setup_commands(a:cchar)
call g:Xsetlist([], 'f') call g:Xsetlist([], 'f')
let l = g:Xgetlist({'text' : "File1:10:Line10"}).items let l = g:Xgetlist({'lines' : ["File2:20:Line20", "File2:30:Line30"]}).items
call assert_equal(1, len(l))
call assert_equal('Line10', l[0].text)
let l = g:Xgetlist({'text' : ["File2:20:Line20", "File2:30:Line30"]}).items
call assert_equal(2, len(l)) call assert_equal(2, len(l))
call assert_equal(30, l[1].lnum) call assert_equal(30, l[1].lnum)
call assert_equal({}, g:Xgetlist({'text' : 10})) call assert_equal({}, g:Xgetlist({'lines' : 10}))
call assert_equal([], g:Xgetlist({'text' : []}).items) call assert_equal({}, g:Xgetlist({'lines' : 'File1:10:Line10'}))
call assert_equal([], g:Xgetlist({'lines' : []}).items)
call assert_equal([], g:Xgetlist({'lines' : [10, 20]}).items)
" Make sure that the quickfix stack is not modified " Make sure that the quickfix stack is not modified
call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr)
endfunc endfunc
func Test_get_list_from_text() func Test_get_list_from_lines()
call XgetListFromText('c') call XgetListFromLines('c')
call XgetListFromText('l') call XgetListFromLines('l')
endfunc endfunc
" Tests for the quickfix list id " Tests for the quickfix list id
@ -2549,7 +2548,7 @@ func Xqfid_tests(cchar)
call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]}) call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]})
call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context) call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context)
call g:Xsetlist([], 'a', {'id':start_id+1, 'text':'F1:10:L10'}) call g:Xsetlist([], 'a', {'id':start_id+1, 'lines':['F1:10:L10']})
call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text) call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text)
call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'})) call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'}))
call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'})) call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'}))