0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.2719: Vim9: appending to dict item doesn't work in a :def function

Problem:    Vim9: appending to dict item doesn't work in a :def function.
Solution:   Implement assignment with operator on indexed item.
This commit is contained in:
Bram Moolenaar
2021-04-05 17:11:17 +02:00
parent 0865b15bc6
commit e42939af87
3 changed files with 195 additions and 118 deletions

View File

@@ -1116,7 +1116,6 @@ enddef
def Test_assign_dict_with_op()
var lines =<< trim END
vim9script
var ds: dict<string> = {a: 'x'}
ds['a'] ..= 'y'
ds.a ..= 'z'
@@ -1148,8 +1147,46 @@ def Test_assign_dict_with_op()
dn.a %= 6
assert_equal(2, dn.a)
END
# TODO: this should also work with a :def function
CheckScriptSuccess(lines)
CheckDefAndScriptSuccess(lines)
enddef
def Test_assign_list_with_op()
var lines =<< trim END
var ls: list<string> = ['x']
ls[0] ..= 'y'
assert_equal('xy', ls[0])
var ln: list<number> = [9]
ln[0] += 2
assert_equal(11, ln[0])
ln[0] -= 3
assert_equal(8, ln[0])
ln[0] *= 2
assert_equal(16, ln[0])
ln[0] /= 3
assert_equal(5, ln[0])
ln[0] %= 3
assert_equal(2, ln[0])
END
CheckDefAndScriptSuccess(lines)
enddef
def Test_assign_with_op_fails()
var lines =<< trim END
var s = 'abc'
s[1] += 'x'
END
CheckDefAndScriptFailure2(lines, 'E1141:', 'E689:', 2)
lines =<< trim END
var s = 'abc'
s[1] ..= 'x'
END
CheckDefAndScriptFailure2(lines, 'E1141:', 'E689:', 2)
enddef
def Test_assign_lambda()