Skip to content

Commit b31be3f

Browse files
committed
patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Problem: Vim9: list unpack doesn't work at the script level. Solution: Detect unpack assignment better. (closes #6494)
1 parent 7892b95 commit b31be3f

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

src/ex_docmd.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3282,10 +3282,19 @@ find_ex_command(
32823282
// after the "]" by to_name_const_end(): check if a "=" follows.
32833283
// If "[...]" has a line break "p" still points at the "[" and it can't
32843284
// be an assignment.
3285-
if (*eap->cmd == '[' && (p == eap->cmd || *skipwhite(p) != '='))
3285+
if (*eap->cmd == '[')
32863286
{
3287-
eap->cmdidx = CMD_eval;
3288-
return eap->cmd;
3287+
p = to_name_const_end(eap->cmd);
3288+
if (p == eap->cmd || *skipwhite(p) != '=')
3289+
{
3290+
eap->cmdidx = CMD_eval;
3291+
return eap->cmd;
3292+
}
3293+
if (p > eap->cmd && *skipwhite(p) == '=')
3294+
{
3295+
eap->cmdidx = CMD_let;
3296+
return eap->cmd;
3297+
}
32893298
}
32903299

32913300
// Recognize an assignment if we recognize the variable name:

src/testdir/test_vim9_script.vim

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,18 @@ def Test_assignment_list()
169169
let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
170170
enddef
171171

172+
def Test_assignment_list_vim9script()
173+
let lines =<< trim END
174+
vim9script
175+
let v1: number
176+
let v2: number
177+
let v3: number
178+
[v1, v2, v3] = [1, 2, 3]
179+
assert_equal([1, 2, 3], [v1, v2, v3])
180+
END
181+
call CheckScriptSuccess(lines)
182+
enddef
183+
172184
def Test_assignment_dict()
173185
let dict1: dict<bool> = #{one: false, two: true}
174186
let dict2: dict<number> = #{one: 1, two: 2}

src/version.c

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

755755
static int included_patches[] =
756756
{ /* Add new patch number below this line */
757+
/**/
758+
1257,
757759
/**/
758760
1256,
759761
/**/

0 commit comments

Comments
 (0)