Mercurial > vim
changeset 23050:50442f932ff7 v8.2.2071
patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Commit: https://github.com/vim/vim/commit/da7c20c9531739bdefa9d4418e6765fb181066e9
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Nov 30 21:12:19 2020 +0100
patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Problem: Vim9: list assign doesn't except empty remainder list.
Solution: Recognize list assignment with ";".
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 30 Nov 2020 21:15:04 +0100 |
parents | 0741c52bf919 |
children | 4f0a99b7b4cb |
files | src/ex_docmd.c src/testdir/test_vim9_assign.vim src/version.c |
diffstat | 3 files changed, 33 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3356,7 +3356,14 @@ find_ex_command( if (*eap->cmd == '[') { p = to_name_const_end(eap->cmd); - if (p == eap->cmd || *skipwhite(p) != '=') + if (p == eap->cmd && *p == '[') + { + int count = 0; + int semicolon = FALSE; + + p = skip_var_list(eap->cmd, TRUE, &count, &semicolon, TRUE); + } + if (p == NULL || p == eap->cmd || *skipwhite(p) != '=') { eap->cmdidx = CMD_eval; return eap->cmd;
--- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -632,30 +632,33 @@ def Test_assignment_default() enddef def Test_assignment_var_list() - var v1: string - var v2: string - var vrem: list<string> - [v1] = ['aaa'] - assert_equal('aaa', v1) + var lines =<< trim END + var v1: string + var v2: string + var vrem: list<string> + [v1] = ['aaa'] + assert_equal('aaa', v1) - [v1, v2] = ['one', 'two'] - assert_equal('one', v1) - assert_equal('two', v2) + [v1, v2] = ['one', 'two'] + assert_equal('one', v1) + assert_equal('two', v2) - [v1, v2; vrem] = ['one', 'two'] - assert_equal('one', v1) - assert_equal('two', v2) - assert_equal([], vrem) + [v1, v2; vrem] = ['one', 'two'] + assert_equal('one', v1) + assert_equal('two', v2) + assert_equal([], vrem) - [v1, v2; vrem] = ['one', 'two', 'three'] - assert_equal('one', v1) - assert_equal('two', v2) - assert_equal(['three'], vrem) + [v1, v2; vrem] = ['one', 'two', 'three'] + assert_equal('one', v1) + assert_equal('two', v2) + assert_equal(['three'], vrem) - [&ts, &sw] = [3, 4] - assert_equal(3, &ts) - assert_equal(4, &sw) - set ts=8 sw=4 + [&ts, &sw] = [3, 4] + assert_equal(3, &ts) + assert_equal(4, &sw) + set ts=8 sw=4 + END + CheckDefAndScriptSuccess(lines) enddef def Test_assignment_vim9script()