aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/testdir
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-08-20 08:27:10 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-11-07 08:24:48 +0800
commit900dd2bdab85b25237cec638265d44c2174154ed (patch)
tree44fc0d39cdd01d31143679545c0a407a366337ee /src/nvim/testdir
parent9b9f84bc62a01ed76b9f53119781816bd3375267 (diff)
downloadrneovim-900dd2bdab85b25237cec638265d44c2174154ed.tar.gz
rneovim-900dd2bdab85b25237cec638265d44c2174154ed.tar.bz2
rneovim-900dd2bdab85b25237cec638265d44c2174154ed.zip
vim-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 vim/vim#9204) https://github.com/vim/vim/commit/19916a8c8920b6a1fd737ffa6d4e363fc7a96319 Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/nvim/testdir')
-rw-r--r--src/nvim/testdir/test_tagfunc.vim50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/nvim/testdir/test_tagfunc.vim b/src/nvim/testdir/test_tagfunc.vim
index bdf5afa5b2..92c2f2d6a1 100644
--- a/src/nvim/testdir/test_tagfunc.vim
+++ b/src/nvim/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