comparison src/testdir/test_tagfunc.vim @ 26388:8aba638e91eb v8.2.3725

patch 8.2.3725: cannot use a lambda for 'completefunc' and 'omnifunc' Commit: https://github.com/vim/vim/commit/8658c759f05b317707d56e3b65a5ef63930c7498 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Fri Dec 3 11:09:29 2021 +0000 patch 8.2.3725: cannot use a lambda for 'completefunc' and 'omnifunc' Problem: Cannot use a lambda for 'completefunc' and 'omnifunc'. Solution: Implement lambda support. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/9257)
author Bram Moolenaar <Bram@vim.org>
date Fri, 03 Dec 2021 12:15:04 +0100
parents dbe615b75f15
children 65ab0b035dd8
comparison
equal deleted inserted replaced
26387:b6eb7e295973 26388:8aba638e91eb
117 set tagfunc& 117 set tagfunc&
118 delfunc Mytagfunc1 118 delfunc Mytagfunc1
119 delfunc Mytagfunc2 119 delfunc Mytagfunc2
120 endfunc 120 endfunc
121 121
122 " Script local tagfunc callback function
123 func s:ScriptLocalTagFunc(pat, flags, info)
124 let g:ScriptLocalFuncArgs = [a:pat, a:flags, a:info]
125 return v:null
126 endfunc
127
122 " Test for different ways of setting the 'tagfunc' option 128 " Test for different ways of setting the 'tagfunc' option
123 func Test_tagfunc_callback() 129 func Test_tagfunc_callback()
124 " Test for using a function() 130 " Test for using a function()
125 func MytagFunc1(pat, flags, info) 131 func MytagFunc1(pat, flags, info)
126 let g:MytagFunc1_args = [a:pat, a:flags, a:info] 132 let g:MytagFunc1_args = [a:pat, a:flags, a:info]
159 let g:MytagFunc2_args = [] 165 let g:MytagFunc2_args = []
160 call assert_fails('tag a14', 'E433:') 166 call assert_fails('tag a14', 'E433:')
161 call assert_equal(['a14', '', {}], g:MytagFunc2_args) 167 call assert_equal(['a14', '', {}], g:MytagFunc2_args)
162 call assert_fails('let &tagfunc = Fn', 'E729:') 168 call assert_fails('let &tagfunc = Fn', 'E729:')
163 169
170 " Test for using a script local function
171 set tagfunc=<SID>ScriptLocalTagFunc
172 new | only
173 let g:ScriptLocalFuncArgs = []
174 call assert_fails('tag a15', 'E433:')
175 call assert_equal(['a15', '', {}], g:ScriptLocalFuncArgs)
176
177 " Test for using a script local funcref variable
178 let Fn = function("s:ScriptLocalTagFunc")
179 let &tagfunc= string(Fn)
180 new | only
181 let g:ScriptLocalFuncArgs = []
182 call assert_fails('tag a16', 'E433:')
183 call assert_equal(['a16', '', {}], g:ScriptLocalFuncArgs)
184
164 " Test for using a lambda function 185 " Test for using a lambda function
165 func MytagFunc3(pat, flags, info) 186 func MytagFunc3(pat, flags, info)
166 let g:MytagFunc3_args = [a:pat, a:flags, a:info] 187 let g:MytagFunc3_args = [a:pat, a:flags, a:info]
167 return v:null 188 return v:null
168 endfunc 189 endfunc
169 set tagfunc={a,\ b,\ c\ ->\ MytagFunc3(a,\ b,\ c)} 190 set tagfunc={a,\ b,\ c\ ->\ MytagFunc3(a,\ b,\ c)}
170 new | only 191 new | only
171 let g:MytagFunc3_args = [] 192 let g:MytagFunc3_args = []
172 call assert_fails('tag a15', 'E433:') 193 call assert_fails('tag a17', 'E433:')
173 call assert_equal(['a15', '', {}], g:MytagFunc3_args) 194 call assert_equal(['a17', '', {}], g:MytagFunc3_args)
174 195
175 " Set 'tagfunc' to a lambda expression 196 " Set 'tagfunc' to a lambda expression
176 let &tagfunc = '{a, b, c -> MytagFunc3(a, b, c)}' 197 let &tagfunc = '{a, b, c -> MytagFunc3(a, b, c)}'
177 new | only 198 new | only
178 let g:MytagFunc3_args = [] 199 let g:MytagFunc3_args = []
179 call assert_fails('tag a16', 'E433:') 200 call assert_fails('tag a18', 'E433:')
180 call assert_equal(['a16', '', {}], g:MytagFunc3_args) 201 call assert_equal(['a18', '', {}], g:MytagFunc3_args)
181 202
182 " Set 'tagfunc' to a variable with a lambda expression 203 " Set 'tagfunc' to a variable with a lambda expression
183 let Lambda = {a, b, c -> MytagFunc3(a, b, c)} 204 let Lambda = {a, b, c -> MytagFunc3(a, b, c)}
184 let &tagfunc = string(Lambda) 205 let &tagfunc = string(Lambda)
185 new | only 206 new | only
186 let g:MytagFunc3_args = [] 207 let g:MytagFunc3_args = []
187 call assert_fails("tag a17", "E433:") 208 call assert_fails("tag a19", "E433:")
188 call assert_equal(['a17', '', {}], g:MytagFunc3_args) 209 call assert_equal(['a19', '', {}], g:MytagFunc3_args)
189 call assert_fails('let &tagfunc = Lambda', 'E729:') 210 call assert_fails('let &tagfunc = Lambda', 'E729:')
190 211
191 " Test for using a lambda function with incorrect return value 212 " Test for using a lambda function with incorrect return value
192 let Lambda = {s -> strlen(s)} 213 let Lambda = {s -> strlen(s)}
193 let &tagfunc = string(Lambda) 214 let &tagfunc = string(Lambda)
194 new | only 215 new | only
195 call assert_fails("tag a17", "E987:") 216 call assert_fails("tag a20", "E987:")
196 217
197 " Test for clearing the 'tagfunc' option 218 " Test for clearing the 'tagfunc' option
198 set tagfunc='' 219 set tagfunc=''
199 set tagfunc& 220 set tagfunc&
200 221