patch 9.1.1588: Vim9: cannot split dict inside command block
Commit:
https://github.com/vim/vim/commit/a566a780297793b6a309ac4563bb17eedb83e6b0
Author: Yegappan Lakshmanan <
yega...@yahoo.com>
Date: Fri Jul 25 18:23:58 2025 +0200
patch 9.1.1588: Vim9: cannot split dict inside command block
Problem: Vim9: cannot split dict inside command block
(lacygoill)
Solution: Remove the current restriction (Yegappan Lakshmanan).
fixes: #17841
closes: #17845
Signed-off-by: Yegappan Lakshmanan <
yega...@yahoo.com>
Signed-off-by: Christian Brabandt <
c...@256bit.org>
diff --git a/src/dict.c b/src/dict.c
index d43ca863e..5339bb52c 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -1075,12 +1075,12 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
had_comma = **arg == ',';
if (had_comma)
{
- if (vim9script && (*arg)[1] != NUL && !VIM_ISWHITE((*arg)[1]))
+ if (vim9script && !IS_WHITE_NL_OR_NUL((*arg)[1]))
{
semsg(_(e_white_space_required_after_str_str), ",", *arg);
goto failret;
}
- *arg = skipwhite(*arg + 1);
+ *arg = skipwhite_and_nl(*arg + 1);
}
// the "}" can be on the next line
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 0008f1e51..8e968d6ef 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -5457,6 +5457,22 @@ def Test_if_cond_shortcircuit_skip_indexing()
v9.CheckSourceSuccess(lines)
enddef
+" Test for defining a dict with multiple keys in a command-block
+def Test_multikey_dict_in_block()
+ var lines =<< trim END
+ vim9script
+ command NewCommand {
+ g:TestDict = {
+ 'key': 'v1',
+ 'other_key': 'v2' }
+ }
+ NewCommand
+ END
+ v9.CheckSourceSuccess(lines)
+ assert_equal({key: 'v1', other_key: 'v2'}, g:TestDict)
+ unlet g:TestDict
+enddef
+
" Keep this last, it messes up highlighting.
def Test_substitute_cmd()
new
diff --git a/src/version.c b/src/version.c
index 16148447b..e9e601aa2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -719,6 +719,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1588,
/**/
1587,
/**/