0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 9.1.0844: if_python: no way to pass local vars to python

Problem:  if_python: no way to pass local vars to python
Solution: Add locals argument to py3eval(), pyeval() and pyxeval()
          (Ben Jackson)

fixes: #8573
closes: #10594

Signed-off-by: Ben Jackson <puremourning@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Ben Jackson
2024-11-06 21:50:05 +01:00
committed by Christian Brabandt
parent fd1a838d36
commit ea19e7856b
16 changed files with 291 additions and 30 deletions

View File

@@ -809,6 +809,49 @@ func Test_python_pyeval()
call AssertException(['let v = pyeval("vim")'], 'E859:')
endfunc
" Test for py3eval with locals
func Test_python_pyeval_locals()
let str = 'a string'
let num = 0xbadb33f
let d = {'a': 1, 'b': 2, 'c': str}
let l = [ str, num, d ]
let locals = #{
\ s: str,
\ n: num,
\ d: d,
\ l: l,
\ }
" check basics
call assert_equal('a string', pyeval('s', locals))
call assert_equal(0xbadb33f, pyeval('n', locals))
call assert_equal(d, pyeval('d', locals))
call assert_equal(l, pyeval('l', locals))
py << trim EOF
def __UpdateDict(d, upd):
d.update(upd)
return d
def __ExtendList(l, *args):
l.extend(*args)
return l
EOF
" check assign to dict member works like bindeval
call assert_equal(3, pyeval('__UpdateDict( d, {"c": 3} )["c"]', locals))
call assert_equal(3, d['c'])
" check append lo list
call assert_equal(4, pyeval('len(__ExtendList(l, ["new item"]))', locals))
call assert_equal("new item", l[-1])
" check calling a function
let StrLen = function('strlen')
call assert_equal(3, pyeval('f("abc")', {'f': StrLen}))
endfunc
" Test for vim.bindeval()
func Test_python_vim_bindeval()
" Float