From: Bram Moolenaar Date: Sat, 6 Aug 2022 17:12:06 +0000 (+0100) Subject: patch 9.0.0156: giving E1170 only in an expression is confusing X-Git-Tag: v9.0.0156 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3f74c0ab32de7ed17dd16d9b06f5455a0bb1c297;p=vim patch 9.0.0156: giving E1170 only in an expression is confusing Problem: Giving E1170 only in an expression is confusing. Solution: Give E1170 for any "#{ comment". (closes #10855) --- diff --git a/src/errors.h b/src/errors.h index 977abbf14..3b23c88ad 100644 --- a/src/errors.h +++ b/src/errors.h @@ -2984,8 +2984,8 @@ EXTERN char e_argument_already_declared_in_script_str[] INIT(= N_("E1168: Argument already declared in the script: %s")); EXTERN char e_expression_too_recursive_str[] INIT(= N_("E1169: Expression too recursive: %s")); -EXTERN char e_cannot_use_hash_curly_to_start_comment_in_an_expression[] - INIT(= N_("E1170: Cannot use #{ to start a comment in an expression")); +EXTERN char e_cannot_use_hash_curly_to_start_comment[] + INIT(= N_("E1170: Cannot use #{ to start a comment")); EXTERN char e_missing_end_block[] INIT(= N_("E1171: Missing } after inline function")); EXTERN char e_cannot_use_default_values_in_lambda[] diff --git a/src/eval.c b/src/eval.c index 8dfbb8f2a..42b883e9b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2157,8 +2157,6 @@ newline_skip_comments(char_u *arg) break; p = nl; } - else if (vim9_bad_comment(p)) - break; if (*p != NL) break; ++p; // skip another NL @@ -2184,10 +2182,7 @@ getline_peek_skip_comments(evalarg_T *evalarg) break; p = skipwhite(next); if (*p != NUL && !vim9_comment_start(p)) - { - (void)vim9_bad_comment(p); return next; - } if (eval_next_line(NULL, evalarg) == NULL) break; } diff --git a/src/ex_docmd.c b/src/ex_docmd.c index fad0bdaca..d8a724393 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -2842,8 +2842,14 @@ parse_command_modifiers( if (eap->nextcmd != NULL) ++eap->nextcmd; } - if (vim9script && has_cmdmod(cmod, FALSE)) - *errormsg = _(e_command_modifier_without_command); + if (vim9script) + { + if (has_cmdmod(cmod, FALSE)) + *errormsg = _(e_command_modifier_without_command); + if (eap->cmd[0] == '#' && eap->cmd[1] == '{' + && eap->cmd[2] != '{') + *errormsg = _(e_cannot_use_hash_curly_to_start_comment); + } return FAIL; } if (*eap->cmd == NUL) diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 98a4590c2..3199ac395 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2668,8 +2668,12 @@ def Test_vim9_comment() 'vim9script', '# something', '#something', - '#{something', + '#{{something', ]) + v9.CheckScriptFailure([ + 'vim9script', + '#{something', + ], 'E1170:') split Xfile v9.CheckScriptSuccess([ diff --git a/src/version.c b/src/version.c index b75d722a6..196f3e68a 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 156, /**/ 155, /**/ diff --git a/src/vim9script.c b/src/vim9script.c index e3cb992e4..e9c9b2c7d 100644 --- a/src/vim9script.c +++ b/src/vim9script.c @@ -176,16 +176,18 @@ not_in_vim9(exarg_T *eap) } /* - * Give an error message if "p" points at "#{" and return TRUE. + * Return TRUE if "p" points at "#{", not "#{{". + * Give an error message if not done already. * This avoids that using a legacy style #{} dictionary leads to difficult to * understand errors. */ int vim9_bad_comment(char_u *p) { - if (!did_emsg && p[0] == '#' && p[1] == '{' && p[2] != '{') + if (p[0] == '#' && p[1] == '{' && p[2] != '{') { - emsg(_(e_cannot_use_hash_curly_to_start_comment_in_an_expression)); + if (!did_emsg) + emsg(_(e_cannot_use_hash_curly_to_start_comment)); return TRUE; } return FALSE; @@ -194,12 +196,13 @@ vim9_bad_comment(char_u *p) /* * Return TRUE if "p" points at a "#" not followed by one '{'. + * Gives an error for using "#{", not for "#{{". * Does not check for white space. */ int vim9_comment_start(char_u *p) { - return p[0] == '#' && (p[1] != '{' || p[2] == '{'); + return p[0] == '#' && !vim9_bad_comment(p); } #if defined(FEAT_EVAL) || defined(PROTO)