mirror of
https://github.com/vim/vim.git
synced 2025-08-26 20:03:41 -04:00
patch 9.1.1219: Strange error with wrong type for matchfuzzy() "camelcase"
Problem: Strange error with type for matchfuzzy() "camelcase". Solution: Show the error "Invalid value for argument camelcase" instead of "Invalid argument: camelcase" (zeertzjq). Note that using tv_get_string() will lead to confusion, as when the value cannot be converted to a string tv_get_string() will also give an error about that, but "camelcase" takes a boolean, not a string. Also don't use tv_get_string() for the "limit" argument above. closes: #16926 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
c00729824d
commit
c4815c157b
@ -1,4 +1,4 @@
|
|||||||
*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 16
|
*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 18
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -7277,7 +7277,7 @@ matchfuzzy({list}, {str} [, {dict}]) *matchfuzzy()*
|
|||||||
returned. Zero means no limit.
|
returned. Zero means no limit.
|
||||||
camelcase Use enhanced camel case scoring making results
|
camelcase Use enhanced camel case scoring making results
|
||||||
better suited for completion related to
|
better suited for completion related to
|
||||||
programming languages. Default is v:true
|
programming languages. Defaults to v:true.
|
||||||
|
|
||||||
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:
|
||||||
|
@ -5000,7 +5000,8 @@ do_fuzzymatch(typval_T *argvars, typval_T *rettv, int retmatchpos)
|
|||||||
|| di->di_tv.vval.v_string == NULL
|
|| di->di_tv.vval.v_string == NULL
|
||||||
|| *di->di_tv.vval.v_string == NUL)
|
|| *di->di_tv.vval.v_string == NUL)
|
||||||
{
|
{
|
||||||
semsg(_(e_invalid_argument_str), tv_get_string(&di->di_tv));
|
semsg(_(e_invalid_value_for_argument_str_str), "key",
|
||||||
|
tv_get_string(&di->di_tv));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
key = tv_get_string(&di->di_tv);
|
key = tv_get_string(&di->di_tv);
|
||||||
@ -5019,7 +5020,7 @@ do_fuzzymatch(typval_T *argvars, typval_T *rettv, int retmatchpos)
|
|||||||
{
|
{
|
||||||
if (di->di_tv.v_type != VAR_NUMBER)
|
if (di->di_tv.v_type != VAR_NUMBER)
|
||||||
{
|
{
|
||||||
semsg(_(e_invalid_argument_str), tv_get_string(&di->di_tv));
|
semsg(_(e_invalid_value_for_argument_str), "limit");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
max_matches = (long)tv_get_number_chk(&di->di_tv, NULL);
|
max_matches = (long)tv_get_number_chk(&di->di_tv, NULL);
|
||||||
@ -5029,7 +5030,7 @@ do_fuzzymatch(typval_T *argvars, typval_T *rettv, int retmatchpos)
|
|||||||
{
|
{
|
||||||
if (di->di_tv.v_type != VAR_BOOL)
|
if (di->di_tv.v_type != VAR_BOOL)
|
||||||
{
|
{
|
||||||
semsg(_(e_invalid_argument_str), "camelcase");
|
semsg(_(e_invalid_value_for_argument_str), "camelcase");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
camelcase = tv_get_bool_chk(&di->di_tv, NULL);
|
camelcase = tv_get_bool_chk(&di->di_tv, NULL);
|
||||||
|
@ -76,6 +76,7 @@ func Test_matchfuzzy()
|
|||||||
call assert_fails("let x = matchfuzzy(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
|
call assert_fails("let x = matchfuzzy(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
|
||||||
call assert_equal([], matchfuzzy(l, 'cam'))
|
call assert_equal([], matchfuzzy(l, 'cam'))
|
||||||
call assert_fails("let x = matchfuzzy(l, 'cam', {'text_cb' : []})", 'E921:')
|
call assert_fails("let x = matchfuzzy(l, 'cam', {'text_cb' : []})", 'E921:')
|
||||||
|
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 123})", 'E475: Invalid value for argument key: 123')
|
||||||
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : []})", 'E730:')
|
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : []})", 'E730:')
|
||||||
call assert_fails("let x = matchfuzzy(l, 'cam', test_null_dict())", 'E1297:')
|
call assert_fails("let x = matchfuzzy(l, 'cam', test_null_dict())", 'E1297:')
|
||||||
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : test_null_string()})", 'E475:')
|
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : test_null_string()})", 'E475:')
|
||||||
@ -88,10 +89,15 @@ func Test_matchfuzzy()
|
|||||||
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 'name'})", 'E730:')
|
call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 'name'})", 'E730:')
|
||||||
|
|
||||||
" camelcase
|
" camelcase
|
||||||
call assert_equal(['Cursor', 'CurSearch', 'CursorLine', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor'],
|
|
||||||
\ matchfuzzy(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur', {"camelcase": v:false}))
|
|
||||||
call assert_equal(['lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'Cursor', 'CurSearch', 'CursorLine'],
|
call assert_equal(['lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'Cursor', 'CurSearch', 'CursorLine'],
|
||||||
\ matchfuzzy(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur'))
|
\ matchfuzzy(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur'))
|
||||||
|
call assert_equal(['lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'Cursor', 'CurSearch', 'CursorLine'],
|
||||||
|
\ matchfuzzy(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur', {"camelcase": v:true}))
|
||||||
|
call assert_equal(['Cursor', 'CurSearch', 'CursorLine', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor'],
|
||||||
|
\ matchfuzzy(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur', {"camelcase": v:false}))
|
||||||
|
call assert_equal(['things', 'sThings', 'thisThings'],
|
||||||
|
\ matchfuzzy(['things','sThings', 'thisThings'], 'thin', {'camelcase': v:false}))
|
||||||
|
call assert_fails("let x = matchfuzzy([], 'foo', {'camelcase': []})", 'E475: Invalid value for argument camelcase')
|
||||||
|
|
||||||
" Test in latin1 encoding
|
" Test in latin1 encoding
|
||||||
let save_enc = &encoding
|
let save_enc = &encoding
|
||||||
@ -155,6 +161,7 @@ func Test_matchfuzzypos()
|
|||||||
call assert_fails("let x = matchfuzzypos(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
|
call assert_fails("let x = matchfuzzypos(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
|
||||||
call assert_equal([[], [], []], matchfuzzypos(l, 'cam'))
|
call assert_equal([[], [], []], matchfuzzypos(l, 'cam'))
|
||||||
call assert_fails("let x = matchfuzzypos(l, 'cam', {'text_cb' : []})", 'E921:')
|
call assert_fails("let x = matchfuzzypos(l, 'cam', {'text_cb' : []})", 'E921:')
|
||||||
|
call assert_fails("let x = matchfuzzypos(l, 'foo', {'key' : 123})", 'E475: Invalid value for argument key: 123')
|
||||||
call assert_fails("let x = matchfuzzypos(l, 'foo', {'key' : []})", 'E730:')
|
call assert_fails("let x = matchfuzzypos(l, 'foo', {'key' : []})", 'E730:')
|
||||||
call assert_fails("let x = matchfuzzypos(l, 'cam', test_null_dict())", 'E1297:')
|
call assert_fails("let x = matchfuzzypos(l, 'cam', test_null_dict())", 'E1297:')
|
||||||
call assert_fails("let x = matchfuzzypos(l, 'foo', {'key' : test_null_string()})", 'E475:')
|
call assert_fails("let x = matchfuzzypos(l, 'foo', {'key' : test_null_string()})", 'E475:')
|
||||||
@ -178,11 +185,13 @@ func Test_matchfuzzypos()
|
|||||||
" camelcase
|
" camelcase
|
||||||
call assert_equal([['lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'Cursor', 'CurSearch', 'CursorLine'], [[1, 2, 3], [2, 3, 4], [2, 3, 4], [6, 7, 8], [0, 1, 2], [0, 1, 2], [0, 1, 2]], [318, 311, 308, 303, 267, 264, 263]],
|
call assert_equal([['lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'Cursor', 'CurSearch', 'CursorLine'], [[1, 2, 3], [2, 3, 4], [2, 3, 4], [6, 7, 8], [0, 1, 2], [0, 1, 2], [0, 1, 2]], [318, 311, 308, 303, 267, 264, 263]],
|
||||||
\ matchfuzzypos(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur'))
|
\ matchfuzzypos(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur'))
|
||||||
|
call assert_equal([['lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'Cursor', 'CurSearch', 'CursorLine'], [[1, 2, 3], [2, 3, 4], [2, 3, 4], [6, 7, 8], [0, 1, 2], [0, 1, 2], [0, 1, 2]], [318, 311, 308, 303, 267, 264, 263]],
|
||||||
|
\ matchfuzzypos(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur', {"camelcase": v:true}))
|
||||||
call assert_equal([['Cursor', 'CurSearch', 'CursorLine', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor'], [[0, 1, 2], [0, 1, 2], [0, 1, 2], [1, 2, 3], [2, 3, 4], [2, 3, 4], [6, 7, 8]], [267, 264, 263, 246, 239, 236, 231]],
|
call assert_equal([['Cursor', 'CurSearch', 'CursorLine', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor'], [[0, 1, 2], [0, 1, 2], [0, 1, 2], [1, 2, 3], [2, 3, 4], [2, 3, 4], [6, 7, 8]], [267, 264, 263, 246, 239, 236, 231]],
|
||||||
\ matchfuzzypos(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur', {"camelcase": v:false}))
|
\ matchfuzzypos(['Cursor', 'lCursor', 'shCurlyIn', 'shCurlyError', 'TracesCursor', 'CurSearch', 'CursorLine'], 'Cur', {"camelcase": v:false}))
|
||||||
call assert_equal([['things', 'sThings', 'thisThings'], [[0, 1, 2, 3], [1, 2, 3, 4], [0, 1, 2, 7]], [333, 287, 279]],
|
call assert_equal([['things', 'sThings', 'thisThings'], [[0, 1, 2, 3], [1, 2, 3, 4], [0, 1, 2, 7]], [333, 287, 279]],
|
||||||
\ matchfuzzypos(['things','sThings', 'thisThings'], 'thin', {'camelcase': v:false}))
|
\ matchfuzzypos(['things','sThings', 'thisThings'], 'thin', {'camelcase': v:false}))
|
||||||
|
call assert_fails("let x = matchfuzzypos([], 'foo', {'camelcase': []})", 'E475: Invalid value for argument camelcase')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for matchfuzzy() with multibyte characters
|
" Test for matchfuzzy() with multibyte characters
|
||||||
@ -273,6 +282,7 @@ 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:')
|
||||||
|
call assert_fails("call matchfuzzy(x, '2', #{limit: []})", 'E475:')
|
||||||
|
|
||||||
let l = [{'id': 5, 'val': 'crayon'}, {'id': 6, 'val': 'camera'}]
|
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', #{text_cb: {v -> v.val}}))
|
||||||
|
@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
1219,
|
||||||
/**/
|
/**/
|
||||||
1218,
|
1218,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user