aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.c11
-rw-r--r--src/nvim/po/uk.po4
-rw-r--r--src/nvim/testdir/test_quickfix.vim102
-rw-r--r--src/nvim/version.c2
4 files changed, 105 insertions, 14 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 39e121eb53..45364a1666 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -158,7 +158,7 @@ static char *e_listdictarg = N_(
static char *e_emptykey = N_("E713: Cannot use empty key for Dictionary");
static char *e_listreq = N_("E714: List required");
static char *e_dictreq = N_("E715: Dictionary required");
-static char *e_strreq = N_("E114: String required");
+static char *e_stringreq = N_("E928: String required");
static char *e_toomanyarg = N_("E118: Too many arguments for function: %s");
static char *e_dictkey = N_("E716: Key not present in Dictionary: %s");
static char *e_funcexts = N_(
@@ -14996,6 +14996,7 @@ static void f_setline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
static void set_qf_ll_list(win_T *wp, typval_T *args, typval_T *rettv)
FUNC_ATTR_NONNULL_ARG(2, 3)
{
+ static char *e_invact = N_("E927: Invalid action: '%s'");
char_u *title = NULL;
int action = ' ';
rettv->vval.v_number = -1;
@@ -15011,13 +15012,17 @@ static void set_qf_ll_list(win_T *wp, typval_T *args, typval_T *rettv)
// Option argument was not given.
goto skip_args;
} else if (action_arg->v_type != VAR_STRING) {
- EMSG(_(e_strreq));
+ EMSG(_(e_stringreq));
return;
}
char_u *act = get_tv_string_chk(action_arg);
- if (*act == 'a' || *act == 'r') {
+ if ((*act == 'a' || *act == 'r' || *act == ' ') && act[1] == NUL) {
action = *act;
}
+ else {
+ EMSG2(_(e_invact), act);
+ return;
+ }
typval_T *title_arg = &args[2];
if (title_arg->v_type == VAR_UNKNOWN) {
diff --git a/src/nvim/po/uk.po b/src/nvim/po/uk.po
index bbbb462292..3145931bfe 100644
--- a/src/nvim/po/uk.po
+++ b/src/nvim/po/uk.po
@@ -564,8 +564,8 @@ msgstr "E714: Потрібен список"
msgid "E715: Dictionary required"
msgstr "E715: Потрібен словник"
-msgid "E114: String required"
-msgstr "E114: Потрібен String"
+msgid "E928: String required"
+msgstr "E928: Потрібен String"
#, c-format
msgid "E118: Too many arguments for function: %s"
diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim
index 9955b4f775..2c6f3c922a 100644
--- a/src/nvim/testdir/test_quickfix.vim
+++ b/src/nvim/testdir/test_quickfix.vim
@@ -483,7 +483,7 @@ endfunction
function Test_locationlist_curwin_was_closed()
augroup testgroup
au!
- autocmd BufReadCmd t call R(expand("<amatch>"))
+ autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>"))
augroup END
function! R(n)
@@ -492,7 +492,7 @@ function Test_locationlist_curwin_was_closed()
new
let q = []
- call add(q, {'filename': 't' })
+ call add(q, {'filename': 'test_curwin.txt' })
call setloclist(0, q)
call assert_fails('lrewind', 'E924:')
@@ -625,14 +625,14 @@ function XquickfixChangedByAutocmd(cchar)
let Xgetexpr = a:cchar . 'getexpr'
let Xrewind = a:cchar . 'rewind'
if a:cchar == 'c'
- let Xsetlist = 'setqflist('
+ let Xsetlist = function('setqflist')
let ErrorNr = 'E925'
function! ReadFunc()
colder
cgetexpr []
endfunc
else
- let Xsetlist = 'setloclist(0,'
+ let Xsetlist = function('setloclist', [0])
let ErrorNr = 'E926'
function! ReadFunc()
lolder
@@ -642,15 +642,15 @@ function XquickfixChangedByAutocmd(cchar)
augroup testgroup
au!
- autocmd BufReadCmd t call ReadFunc()
+ autocmd BufReadCmd test_changed.txt call ReadFunc()
augroup END
- bwipe!
+ new | only
let words = [ "a", "b" ]
let qflist = []
for word in words
- call add(qflist, {'filename': 't'})
- exec "call " . Xsetlist . "qflist, '')"
+ call add(qflist, {'filename': 'test_changed.txt'})
+ call Xsetlist(qflist, ' ')
endfor
exec "call assert_fails('" . Xrewind . "', '" . ErrorNr . ":')"
@@ -727,3 +727,89 @@ function Test_setqflist()
call delete('Xtestfile')
endfunction
+
+function! XquickfixSetListWithAct(cchar)
+ let Xolder = a:cchar . 'older'
+ let Xnewer = a:cchar . 'newer'
+ if a:cchar == 'c'
+ let Xsetlist = function('setqflist')
+ let Xgetlist = function('getqflist')
+ else
+ let Xsetlist = function('setloclist', [0])
+ let Xgetlist = function('getloclist', [0])
+ endif
+ let list1 = [{'filename': 'fnameA', 'text': 'A'},
+ \ {'filename': 'fnameB', 'text': 'B'}]
+ let list2 = [{'filename': 'fnameC', 'text': 'C'},
+ \ {'filename': 'fnameD', 'text': 'D'},
+ \ {'filename': 'fnameE', 'text': 'E'}]
+
+ " {action} is unspecified. Same as specifing ' '.
+ new | only
+ exec "silent! " . Xnewer . "99"
+ call Xsetlist(list1)
+ call Xsetlist(list2)
+ let li = Xgetlist()
+ call assert_equal(3, len(li))
+ call assert_equal('C', li[0]['text'])
+ call assert_equal('D', li[1]['text'])
+ call assert_equal('E', li[2]['text'])
+ exec "silent! " . Xolder
+ let li = Xgetlist()
+ call assert_equal(2, len(li))
+ call assert_equal('A', li[0]['text'])
+ call assert_equal('B', li[1]['text'])
+
+ " {action} is specified ' '.
+ new | only
+ exec "silent! " . Xnewer . "99"
+ call Xsetlist(list1)
+ call Xsetlist(list2, ' ')
+ let li = Xgetlist()
+ call assert_equal(3, len(li))
+ call assert_equal('C', li[0]['text'])
+ call assert_equal('D', li[1]['text'])
+ call assert_equal('E', li[2]['text'])
+ exec "silent! " . Xolder
+ let li = Xgetlist()
+ call assert_equal(2, len(li))
+ call assert_equal('A', li[0]['text'])
+ call assert_equal('B', li[1]['text'])
+
+ " {action} is specified 'a'.
+ new | only
+ exec "silent! " . Xnewer . "99"
+ call Xsetlist(list1)
+ call Xsetlist(list2, 'a')
+ let li = Xgetlist()
+ call assert_equal(5, len(li))
+ call assert_equal('A', li[0]['text'])
+ call assert_equal('B', li[1]['text'])
+ call assert_equal('C', li[2]['text'])
+ call assert_equal('D', li[3]['text'])
+ call assert_equal('E', li[4]['text'])
+
+ " {action} is specified 'r'.
+ new | only
+ exec "silent! " . Xnewer . "99"
+ call Xsetlist(list1)
+ call Xsetlist(list2, 'r')
+ let li = Xgetlist()
+ call assert_equal(3, len(li))
+ call assert_equal('C', li[0]['text'])
+ call assert_equal('D', li[1]['text'])
+ call assert_equal('E', li[2]['text'])
+
+ " Test for wrong value.
+ new | only
+ call assert_fails("call Xsetlist(0)", 'E714:')
+ call assert_fails("call Xsetlist(list1, '')", 'E927:')
+ call assert_fails("call Xsetlist(list1, 'aa')", 'E927:')
+ call assert_fails("call Xsetlist(list1, ' a')", 'E927:')
+ call assert_fails("call Xsetlist(list1, 0)", 'E928:')
+endfunc
+
+function Test_quickfix_set_list_with_act()
+ call XquickfixSetListWithAct('c')
+ call XquickfixSetListWithAct('l')
+endfunction
diff --git a/src/nvim/version.c b/src/nvim/version.c
index d10d5cf75b..a5addaf819 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -672,7 +672,7 @@ static int included_patches[] = {
// 1771 NA
// 1770 NA
// 1769,
- // 1768,
+ 1768,
// 1767 NA
// 1766 NA
1765,