diff src/testdir/test_tagfunc.vim @ 26268:3aa48d4e3dc8 v8.2.3665

patch 8.2.3665: cannot use a lambda for 'tagfunc' Commit: https://github.com/vim/vim/commit/19916a8c8920b6a1fd737ffa6d4e363fc7a96319 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Wed Nov 24 16:32:55 2021 +0000 patch 8.2.3665: cannot use a lambda for 'tagfunc' Problem: Cannot use a lambda for 'tagfunc'. Solution: Use 'tagfunc' like 'opfunc'. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/9204)
author Bram Moolenaar <Bram@vim.org>
date Wed, 24 Nov 2021 17:45:03 +0100
parents 4902263c302e
children dbe615b75f15
line wrap: on
line diff
--- a/src/testdir/test_tagfunc.vim
+++ b/src/testdir/test_tagfunc.vim
@@ -117,4 +117,54 @@ func Test_tagfunc_settagstack()
   delfunc Mytagfunc2
 endfunc
 
+" Test for different ways of setting the 'tagfunc' option
+func Test_tagfunc_callback()
+  " Test for using a function()
+  func MytagFunc1(pat, flags, info)
+    let g:MytagFunc1_args = [a:pat, a:flags, a:info]
+    return v:null
+  endfunc
+  let g:MytagFunc1_args = []
+  set tagfunc=function('MytagFunc1')
+  call assert_fails('tag abc', 'E433:')
+  call assert_equal(['abc', '', {}], g:MytagFunc1_args)
+
+  " Test for using a funcref()
+  new
+  func MytagFunc2(pat, flags, info)
+    let g:MytagFunc2_args = [a:pat, a:flags, a:info]
+    return v:null
+  endfunc
+  let g:MytagFunc2_args = []
+  set tagfunc=funcref('MytagFunc2')
+  call assert_fails('tag def', 'E433:')
+  call assert_equal(['def', '', {}], g:MytagFunc2_args)
+
+  " Test for using a lambda function
+  new
+  func MytagFunc3(pat, flags, info)
+    let g:MytagFunc3_args = [a:pat, a:flags, a:info]
+    return v:null
+  endfunc
+  let g:MytagFunc3_args = []
+  let &tagfunc= '{a, b, c -> MytagFunc3(a, b, c)}'
+  call assert_fails('tag ghi', 'E433:')
+  call assert_equal(['ghi', '', {}], g:MytagFunc3_args)
+
+  " Test for clearing the 'tagfunc' option
+  set tagfunc=''
+  set tagfunc&
+
+  call assert_fails("set tagfunc=function('abc')", "E700:")
+  call assert_fails("set tagfunc=funcref('abc')", "E700:")
+  let &tagfunc = "{a -> 'abc'}"
+  call assert_fails("echo taglist('a')", "E987:")
+
+  " cleanup
+  delfunc MytagFunc1
+  delfunc MytagFunc2
+  delfunc MytagFunc3
+  %bw!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab