1
0
forked from aniani/vim

patch 8.2.5116: "limit" option of matchfuzzy() not always respected

Problem:    "limit" option of matchfuzzy() not always respected.
Solution:   Remove "else". (Kazuyuki Miyagi, closes #10586)
This commit is contained in:
Kazuyuki Miyagi
2022-06-17 18:30:03 +01:00
committed by Bram Moolenaar
parent d592deb336
commit 47f1a55849
4 changed files with 14 additions and 3 deletions

View File

@@ -5899,6 +5899,8 @@ matchfuzzy({list}, {str} [, {dict}]) *matchfuzzy()*
matchseq When this item is present return only matches matchseq When this item is present return only matches
that contain the characters in {str} in the that contain the characters in {str} in the
given sequence. given sequence.
limit Maximum number of matches in {list} to be
returned. Zero means no limit.
If {list} is a list of dictionaries, then the optional {dict} If {list} is a list of dictionaries, then the optional {dict}
argument supports the following additional items: argument supports the following additional items:
@@ -5910,8 +5912,6 @@ matchfuzzy({list}, {str} [, {dict}]) *matchfuzzy()*
This should accept a dictionary item as the This should accept a dictionary item as the
argument and return the text for that item to argument and return the text for that item to
use for fuzzy matching. use for fuzzy matching.
limit Maximum number of matches in {list} to be
returned. Zero means no limit.
{str} is treated as a literal string and regular expression {str} is treated as a literal string and regular expression
matching is NOT supported. The maximum supported {str} length matching is NOT supported. The maximum supported {str} length

View File

@@ -4844,7 +4844,8 @@ do_fuzzymatch(typval_T *argvars, typval_T *rettv, int retmatchpos)
return; return;
} }
} }
else if ((di = dict_find(d, (char_u *)"limit", -1)) != NULL)
if ((di = dict_find(d, (char_u *)"limit", -1)) != NULL)
{ {
if (di->di_tv.v_type != VAR_NUMBER) if (di->di_tv.v_type != VAR_NUMBER)
{ {

View File

@@ -243,6 +243,14 @@ func Test_matchfuzzy_limit()
call assert_equal(['2', '2'], x->matchfuzzy('2', #{limit: 2})) call assert_equal(['2', '2'], x->matchfuzzy('2', #{limit: 2}))
call assert_equal(['2', '2'], x->matchfuzzy('2', #{limit: 3})) call assert_equal(['2', '2'], x->matchfuzzy('2', #{limit: 3}))
call assert_fails("call matchfuzzy(x, '2', #{limit: '2'})", 'E475:') call assert_fails("call matchfuzzy(x, '2', #{limit: '2'})", 'E475:')
let l = [{'id': 5, 'val': 'crayon'}, {'id': 6, 'val': 'camera'}]
call assert_equal([{'id': 5, 'val': 'crayon'}, {'id': 6, 'val': 'camera'}], l->matchfuzzy('c', #{text_cb: {v -> v.val}}))
call assert_equal([{'id': 5, 'val': 'crayon'}, {'id': 6, 'val': 'camera'}], l->matchfuzzy('c', #{key: 'val'}))
call assert_equal([{'id': 5, 'val': 'crayon'}, {'id': 6, 'val': 'camera'}], l->matchfuzzy('c', #{text_cb: {v -> v.val}, limit: 0}))
call assert_equal([{'id': 5, 'val': 'crayon'}, {'id': 6, 'val': 'camera'}], l->matchfuzzy('c', #{key: 'val', limit: 0}))
call assert_equal([{'id': 5, 'val': 'crayon'}], l->matchfuzzy('c', #{text_cb: {v -> v.val}, limit: 1}))
call assert_equal([{'id': 5, 'val': 'crayon'}], l->matchfuzzy('c', #{key: 'val', limit: 1}))
endfunc endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
5116,
/**/ /**/
5115, 5115,
/**/ /**/