]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1660: error for using matchfuzzy() returning a list of dicts v9.0.1660
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 24 Jun 2023 15:42:25 +0000 (16:42 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 24 Jun 2023 15:42:25 +0000 (16:42 +0100)
Problem:    Error for using matchfuzzy() in Vim9 script returning a list of
            dicts.
Solution:   Make return type of matchfuzzy() list<any>. (Yegappan Lakshmanan,
            closes #12574)

src/evalfunc.c
src/testdir/test_vim9_builtin.vim
src/version.c

index 63ca0486fe204b93d487f5777545c51ffc9a8cf4..d644a3ee546ce2a7cbad741da10d1b25b94966dd 100644 (file)
@@ -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,
index b76db7d6358fe255d8063d60f9858f6f93403ecc..23a68358cbf4ab73444704276291cd547c660d0e 100644 (file)
@@ -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<any> but got list<unknown>', '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<dict<any>> = matchfuzzy(items, 'abc', {key: 'name'})
+    assert_equal([{name: 'abc', id: 3}], l)
+    var k: list<string> = 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<any> but got list<unknown>', '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<dict<any>> = matchfuzzypos(items, 'abc', {key: 'name'})[0]
+    assert_equal([{name: 'abc', id: 3}], l)
+    var k: list<string> = matchfuzzypos(['one', 'two', 'who'], 'o')[0]
+    assert_equal(['one', 'two', 'who'], k)
+  END
+  v9.CheckDefAndScriptSuccess(lines)
 enddef
 
 def Test_matchlist()
index e174f585086dd26c3ed4128485df5dc67386f6e7..ba999074ba697d600483f31ae85fe42cd4e9ea82 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1660,
 /**/
     1659,
 /**/