forked from aniani/vim
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)
This commit is contained in:
@@ -2745,15 +2745,18 @@ parse_command_modifiers(
|
|||||||
// silent! verbose = func()
|
// silent! verbose = func()
|
||||||
// verbose.member = 2
|
// verbose.member = 2
|
||||||
// verbose[expr] = 2
|
// verbose[expr] = 2
|
||||||
|
// But not:
|
||||||
|
// verbose [a, b] = list
|
||||||
if (in_vim9script())
|
if (in_vim9script())
|
||||||
{
|
{
|
||||||
char_u *s;
|
char_u *s, *n;
|
||||||
|
|
||||||
for (s = p; ASCII_ISALPHA(*s); ++s)
|
for (s = p; ASCII_ISALPHA(*s); ++s)
|
||||||
;
|
;
|
||||||
s = skipwhite(s);
|
n = skipwhite(s);
|
||||||
if (vim_strchr((char_u *)".[=", *s) != NULL
|
if (vim_strchr((char_u *)".=", *n) != NULL
|
||||||
|| (*s != NUL && s[1] == '='))
|
|| *s == '['
|
||||||
|
|| (*n != NUL && n[1] == '='))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1466,21 +1466,27 @@ enddef
|
|||||||
|
|
||||||
def Test_assign_command_modifier()
|
def Test_assign_command_modifier()
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
var verbose = 0
|
var verbose = 0
|
||||||
verbose = 1
|
verbose = 1
|
||||||
assert_equal(1, verbose)
|
assert_equal(1, verbose)
|
||||||
silent verbose = 2
|
silent verbose = 2
|
||||||
assert_equal(2, verbose)
|
assert_equal(2, verbose)
|
||||||
silent verbose += 2
|
silent verbose += 2
|
||||||
assert_equal(4, verbose)
|
assert_equal(4, verbose)
|
||||||
silent verbose -= 1
|
silent verbose -= 1
|
||||||
assert_equal(3, verbose)
|
assert_equal(3, verbose)
|
||||||
|
|
||||||
var topleft = {one: 1}
|
var topleft = {one: 1}
|
||||||
sandbox topleft.one = 3
|
sandbox topleft.one = 3
|
||||||
assert_equal({one: 3}, topleft)
|
assert_equal({one: 3}, topleft)
|
||||||
leftabove topleft[' '] = 4
|
leftabove topleft[' '] = 4
|
||||||
assert_equal({one: 3, ' ': 4}, topleft)
|
assert_equal({one: 3, ' ': 4}, topleft)
|
||||||
|
|
||||||
|
var x: number
|
||||||
|
var y: number
|
||||||
|
silent [x, y] = [1, 2]
|
||||||
|
assert_equal(1, x)
|
||||||
|
assert_equal(2, y)
|
||||||
END
|
END
|
||||||
CheckDefAndScriptSuccess(lines)
|
CheckDefAndScriptSuccess(lines)
|
||||||
enddef
|
enddef
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2317,
|
||||||
/**/
|
/**/
|
||||||
2316,
|
2316,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user