Mercurial > vim
comparison src/testdir/test_tagfunc.vim @ 26441:65ab0b035dd8 v8.2.3751
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Commit: https://github.com/vim/vim/commit/6409553b6e3b4de4e1d72b8ee5445595214581ff
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Mon Dec 6 11:03:55 2021 +0000
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Problem: Cannot assign a lambda to an option that takes a function.
Solution: Automatically convert the lambda to a string. (Yegappan
Lakshmanan, closes #9286)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 06 Dec 2021 12:15:04 +0100 |
parents | 8aba638e91eb |
children | 65b4109a4297 |
comparison
equal
deleted
inserted
replaced
26440:f6f5f604c17c | 26441:65ab0b035dd8 |
---|---|
138 call assert_fails('tag a11', 'E433:') | 138 call assert_fails('tag a11', 'E433:') |
139 call assert_equal(['a11', '', {}], g:MytagFunc1_args) | 139 call assert_equal(['a11', '', {}], g:MytagFunc1_args) |
140 | 140 |
141 " Using a funcref variable to set 'tagfunc' | 141 " Using a funcref variable to set 'tagfunc' |
142 let Fn = function('MytagFunc1') | 142 let Fn = function('MytagFunc1') |
143 let &tagfunc = string(Fn) | 143 let &tagfunc = Fn |
144 new | only | 144 new | only |
145 let g:MytagFunc1_args = [] | 145 let g:MytagFunc1_args = [] |
146 call assert_fails('tag a12', 'E433:') | 146 call assert_fails('tag a12', 'E433:') |
147 call assert_equal(['a12', '', {}], g:MytagFunc1_args) | 147 call assert_equal(['a12', '', {}], g:MytagFunc1_args) |
148 call assert_fails('let &tagfunc = Fn', 'E729:') | 148 |
149 " Using a string(funcref_variable) to set 'tagfunc' | |
150 let Fn = function('MytagFunc1') | |
151 let &tagfunc = string(Fn) | |
152 new | only | |
153 let g:MytagFunc1_args = [] | |
154 call assert_fails('tag a12', 'E433:') | |
155 call assert_equal(['a12', '', {}], g:MytagFunc1_args) | |
149 | 156 |
150 " Test for using a funcref() | 157 " Test for using a funcref() |
151 func MytagFunc2(pat, flags, info) | 158 func MytagFunc2(pat, flags, info) |
152 let g:MytagFunc2_args = [a:pat, a:flags, a:info] | 159 let g:MytagFunc2_args = [a:pat, a:flags, a:info] |
153 return v:null | 160 return v:null |
158 call assert_fails('tag a13', 'E433:') | 165 call assert_fails('tag a13', 'E433:') |
159 call assert_equal(['a13', '', {}], g:MytagFunc2_args) | 166 call assert_equal(['a13', '', {}], g:MytagFunc2_args) |
160 | 167 |
161 " Using a funcref variable to set 'tagfunc' | 168 " Using a funcref variable to set 'tagfunc' |
162 let Fn = funcref('MytagFunc2') | 169 let Fn = funcref('MytagFunc2') |
163 let &tagfunc = string(Fn) | 170 let &tagfunc = Fn |
164 new | only | 171 new | only |
165 let g:MytagFunc2_args = [] | 172 let g:MytagFunc2_args = [] |
166 call assert_fails('tag a14', 'E433:') | 173 call assert_fails('tag a14', 'E433:') |
167 call assert_equal(['a14', '', {}], g:MytagFunc2_args) | 174 call assert_equal(['a14', '', {}], g:MytagFunc2_args) |
168 call assert_fails('let &tagfunc = Fn', 'E729:') | 175 |
176 " Using a string(funcref_variable) to set 'tagfunc' | |
177 let Fn = funcref('MytagFunc2') | |
178 let &tagfunc = string(Fn) | |
179 new | only | |
180 let g:MytagFunc2_args = [] | |
181 call assert_fails('tag a14', 'E433:') | |
182 call assert_equal(['a14', '', {}], g:MytagFunc2_args) | |
169 | 183 |
170 " Test for using a script local function | 184 " Test for using a script local function |
171 set tagfunc=<SID>ScriptLocalTagFunc | 185 set tagfunc=<SID>ScriptLocalTagFunc |
172 new | only | 186 new | only |
173 let g:ScriptLocalFuncArgs = [] | 187 let g:ScriptLocalFuncArgs = [] |
174 call assert_fails('tag a15', 'E433:') | 188 call assert_fails('tag a15', 'E433:') |
175 call assert_equal(['a15', '', {}], g:ScriptLocalFuncArgs) | 189 call assert_equal(['a15', '', {}], g:ScriptLocalFuncArgs) |
176 | 190 |
177 " Test for using a script local funcref variable | 191 " Test for using a script local funcref variable |
192 let Fn = function("s:ScriptLocalTagFunc") | |
193 let &tagfunc= Fn | |
194 new | only | |
195 let g:ScriptLocalFuncArgs = [] | |
196 call assert_fails('tag a16', 'E433:') | |
197 call assert_equal(['a16', '', {}], g:ScriptLocalFuncArgs) | |
198 | |
199 " Test for using a string(script local funcref variable) | |
178 let Fn = function("s:ScriptLocalTagFunc") | 200 let Fn = function("s:ScriptLocalTagFunc") |
179 let &tagfunc= string(Fn) | 201 let &tagfunc= string(Fn) |
180 new | only | 202 new | only |
181 let g:ScriptLocalFuncArgs = [] | 203 let g:ScriptLocalFuncArgs = [] |
182 call assert_fails('tag a16', 'E433:') | 204 call assert_fails('tag a16', 'E433:') |
192 let g:MytagFunc3_args = [] | 214 let g:MytagFunc3_args = [] |
193 call assert_fails('tag a17', 'E433:') | 215 call assert_fails('tag a17', 'E433:') |
194 call assert_equal(['a17', '', {}], g:MytagFunc3_args) | 216 call assert_equal(['a17', '', {}], g:MytagFunc3_args) |
195 | 217 |
196 " Set 'tagfunc' to a lambda expression | 218 " Set 'tagfunc' to a lambda expression |
197 let &tagfunc = '{a, b, c -> MytagFunc3(a, b, c)}' | 219 let &tagfunc = {a, b, c -> MytagFunc3(a, b, c)} |
198 new | only | 220 new | only |
199 let g:MytagFunc3_args = [] | 221 let g:MytagFunc3_args = [] |
200 call assert_fails('tag a18', 'E433:') | 222 call assert_fails('tag a18', 'E433:') |
201 call assert_equal(['a18', '', {}], g:MytagFunc3_args) | 223 call assert_equal(['a18', '', {}], g:MytagFunc3_args) |
202 | 224 |
225 " Set 'tagfunc' to a string(lambda expression) | |
226 let &tagfunc = '{a, b, c -> MytagFunc3(a, b, c)}' | |
227 new | only | |
228 let g:MytagFunc3_args = [] | |
229 call assert_fails('tag a18', 'E433:') | |
230 call assert_equal(['a18', '', {}], g:MytagFunc3_args) | |
231 | |
203 " Set 'tagfunc' to a variable with a lambda expression | 232 " Set 'tagfunc' to a variable with a lambda expression |
204 let Lambda = {a, b, c -> MytagFunc3(a, b, c)} | 233 let Lambda = {a, b, c -> MytagFunc3(a, b, c)} |
205 let &tagfunc = string(Lambda) | 234 let &tagfunc = Lambda |
206 new | only | 235 new | only |
207 let g:MytagFunc3_args = [] | 236 let g:MytagFunc3_args = [] |
208 call assert_fails("tag a19", "E433:") | 237 call assert_fails("tag a19", "E433:") |
209 call assert_equal(['a19', '', {}], g:MytagFunc3_args) | 238 call assert_equal(['a19', '', {}], g:MytagFunc3_args) |
210 call assert_fails('let &tagfunc = Lambda', 'E729:') | 239 |
240 " Set 'tagfunc' to a string(variable with a lambda expression) | |
241 let Lambda = {a, b, c -> MytagFunc3(a, b, c)} | |
242 let &tagfunc = string(Lambda) | |
243 new | only | |
244 let g:MytagFunc3_args = [] | |
245 call assert_fails("tag a19", "E433:") | |
246 call assert_equal(['a19', '', {}], g:MytagFunc3_args) | |
211 | 247 |
212 " Test for using a lambda function with incorrect return value | 248 " Test for using a lambda function with incorrect return value |
213 let Lambda = {s -> strlen(s)} | 249 let Lambda = {s -> strlen(s)} |
214 let &tagfunc = string(Lambda) | 250 let &tagfunc = string(Lambda) |
215 new | only | 251 new | only |
242 # Test for using a lambda | 278 # Test for using a lambda |
243 def MytagFunc2(pat: string, flags: string, info: dict<any>): any | 279 def MytagFunc2(pat: string, flags: string, info: dict<any>): any |
244 g:MytagFunc2_args = [pat, flags, info] | 280 g:MytagFunc2_args = [pat, flags, info] |
245 return null | 281 return null |
246 enddef | 282 enddef |
247 &tagfunc = '(a, b, c) => MytagFunc2(a, b, c)' | 283 &tagfunc = (a, b, c) => MytagFunc2(a, b, c) |
248 new | only | 284 new | only |
249 g:MytagFunc2_args = [] | 285 g:MytagFunc2_args = [] |
250 assert_fails('tag a20', 'E433:') | 286 assert_fails('tag a20', 'E433:') |
251 assert_equal(['a20', '', {}], g:MytagFunc2_args) | 287 assert_equal(['a20', '', {}], g:MytagFunc2_args) |
252 | 288 |
289 # Test for using a string(lambda) | |
290 &tagfunc = '(a, b, c) => MytagFunc2(a, b, c)' | |
291 new | only | |
292 g:MytagFunc2_args = [] | |
293 assert_fails('tag a20', 'E433:') | |
294 assert_equal(['a20', '', {}], g:MytagFunc2_args) | |
295 | |
253 # Test for using a variable with a lambda expression | 296 # Test for using a variable with a lambda expression |
254 var Fn: func = (a, b, c) => MytagFunc2(a, b, c) | 297 var Fn: func = (a, b, c) => MytagFunc2(a, b, c) |
298 &tagfunc = Fn | |
299 new | only | |
300 g:MytagFunc2_args = [] | |
301 assert_fails('tag a30', 'E433:') | |
302 assert_equal(['a30', '', {}], g:MytagFunc2_args) | |
303 | |
304 # Test for using a variable with a lambda expression | |
255 &tagfunc = string(Fn) | 305 &tagfunc = string(Fn) |
256 new | only | 306 new | only |
257 g:MytagFunc2_args = [] | 307 g:MytagFunc2_args = [] |
258 assert_fails('tag a30', 'E433:') | 308 assert_fails('tag a30', 'E433:') |
259 assert_equal(['a30', '', {}], g:MytagFunc2_args) | 309 assert_equal(['a30', '', {}], g:MytagFunc2_args) |