Skip to content

Commit 9e0f883

Browse files
committed
patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Problem: Vim9: command modifier before list unpack doesn't work. Solution: Only recognize "[" directly after the name. (closes #7641)
1 parent b657198 commit 9e0f883

3 files changed

Lines changed: 30 additions & 19 deletions

File tree

src/ex_docmd.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2745,15 +2745,18 @@ parse_command_modifiers(
27452745
// silent! verbose = func()
27462746
// verbose.member = 2
27472747
// verbose[expr] = 2
2748+
// But not:
2749+
// verbose [a, b] = list
27482750
if (in_vim9script())
27492751
{
2750-
char_u *s;
2752+
char_u *s, *n;
27512753

27522754
for (s = p; ASCII_ISALPHA(*s); ++s)
27532755
;
2754-
s = skipwhite(s);
2755-
if (vim_strchr((char_u *)".[=", *s) != NULL
2756-
|| (*s != NUL && s[1] == '='))
2756+
n = skipwhite(s);
2757+
if (vim_strchr((char_u *)".=", *n) != NULL
2758+
|| *s == '['
2759+
|| (*n != NUL && n[1] == '='))
27572760
break;
27582761
}
27592762

src/testdir/test_vim9_assign.vim

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,21 +1466,27 @@ enddef
14661466

14671467
def Test_assign_command_modifier()
14681468
var lines =<< trim END
1469-
var verbose = 0
1470-
verbose = 1
1471-
assert_equal(1, verbose)
1472-
silent verbose = 2
1473-
assert_equal(2, verbose)
1474-
silent verbose += 2
1475-
assert_equal(4, verbose)
1476-
silent verbose -= 1
1477-
assert_equal(3, verbose)
1478-
1479-
var topleft = {one: 1}
1480-
sandbox topleft.one = 3
1481-
assert_equal({one: 3}, topleft)
1482-
leftabove topleft[' '] = 4
1483-
assert_equal({one: 3, ' ': 4}, topleft)
1469+
var verbose = 0
1470+
verbose = 1
1471+
assert_equal(1, verbose)
1472+
silent verbose = 2
1473+
assert_equal(2, verbose)
1474+
silent verbose += 2
1475+
assert_equal(4, verbose)
1476+
silent verbose -= 1
1477+
assert_equal(3, verbose)
1478+
1479+
var topleft = {one: 1}
1480+
sandbox topleft.one = 3
1481+
assert_equal({one: 3}, topleft)
1482+
leftabove topleft[' '] = 4
1483+
assert_equal({one: 3, ' ': 4}, topleft)
1484+
1485+
var x: number
1486+
var y: number
1487+
silent [x, y] = [1, 2]
1488+
assert_equal(1, x)
1489+
assert_equal(2, y)
14841490
END
14851491
CheckDefAndScriptSuccess(lines)
14861492
enddef

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
2317,
753755
/**/
754756
2316,
755757
/**/

0 commit comments

Comments
 (0)