From: Yegappan Lakshmanan Date: Sat, 24 Jun 2023 15:42:25 +0000 (+0100) Subject: patch 9.0.1660: error for using matchfuzzy() returning a list of dicts X-Git-Tag: v9.0.1660 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2d8e9985440d2f1ebb1be55296f371e10739bc76;p=thirdparty%2Fvim.git patch 9.0.1660: error for using matchfuzzy() returning a list of dicts Problem: Error for using matchfuzzy() in Vim9 script returning a list of dicts. Solution: Make return type of matchfuzzy() list. (Yegappan Lakshmanan, closes #12574) --- diff --git a/src/evalfunc.c b/src/evalfunc.c index 63ca0486fe..d644a3ee54 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -2224,7 +2224,7 @@ static funcentry_T global_functions[] = {"matchend", 2, 4, FEARG_1, arg24_match_func, ret_number, f_matchend}, {"matchfuzzy", 2, 3, FEARG_1, arg3_list_string_dict, - ret_list_string, f_matchfuzzy}, + ret_list_any, f_matchfuzzy}, {"matchfuzzypos", 2, 3, FEARG_1, arg3_list_string_dict, ret_list_any, f_matchfuzzypos}, {"matchlist", 2, 4, FEARG_1, arg24_match_func, diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index b76db7d635..23a68358cb 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -2821,6 +2821,15 @@ def Test_matchfuzzy() v9.CheckDefAndScriptFailure(['matchfuzzy([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) v9.CheckDefAndScriptFailure(['matchfuzzy([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) matchfuzzy(['abc', 'xyz'], '')->assert_equal([]) + var lines =<< trim END + var items = [{name: 'xyz', id: 1}, {name: 'def', id: 2}, + {name: 'abc', id: 3}] + var l: list> = matchfuzzy(items, 'abc', {key: 'name'}) + assert_equal([{name: 'abc', id: 3}], l) + var k: list = matchfuzzy(['one', 'two', 'who'], 'o') + assert_equal(['one', 'two', 'who'], k) + END + v9.CheckDefAndScriptSuccess(lines) enddef def Test_matchfuzzypos() @@ -2828,6 +2837,15 @@ def Test_matchfuzzypos() v9.CheckDefAndScriptFailure(['matchfuzzypos([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) v9.CheckDefAndScriptFailure(['matchfuzzypos([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3']) matchfuzzypos(['abc', 'xyz'], '')->assert_equal([[], [], []]) + var lines =<< trim END + var items = [{name: 'xyz', id: 1}, {name: 'def', id: 2}, + {name: 'abc', id: 3}] + var l: list> = matchfuzzypos(items, 'abc', {key: 'name'})[0] + assert_equal([{name: 'abc', id: 3}], l) + var k: list = matchfuzzypos(['one', 'two', 'who'], 'o')[0] + assert_equal(['one', 'two', 'who'], k) + END + v9.CheckDefAndScriptSuccess(lines) enddef def Test_matchlist() diff --git a/src/version.c b/src/version.c index e174f58508..ba999074ba 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1660, /**/ 1659, /**/