Mercurial > vim
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 |