0
0
mirror of https://github.com/vim/vim.git synced 2025-09-28 04:24:06 -04:00

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)
This commit is contained in:
Bram Moolenaar
2022-08-06 18:12:06 +01:00
parent db9b96d844
commit 3f74c0ab32
6 changed files with 24 additions and 14 deletions

View File

@@ -2984,8 +2984,8 @@ EXTERN char e_argument_already_declared_in_script_str[]
INIT(= N_("E1168: Argument already declared in the script: %s")); INIT(= N_("E1168: Argument already declared in the script: %s"));
EXTERN char e_expression_too_recursive_str[] EXTERN char e_expression_too_recursive_str[]
INIT(= N_("E1169: Expression too recursive: %s")); INIT(= N_("E1169: Expression too recursive: %s"));
EXTERN char e_cannot_use_hash_curly_to_start_comment_in_an_expression[] EXTERN char e_cannot_use_hash_curly_to_start_comment[]
INIT(= N_("E1170: Cannot use #{ to start a comment in an expression")); INIT(= N_("E1170: Cannot use #{ to start a comment"));
EXTERN char e_missing_end_block[] EXTERN char e_missing_end_block[]
INIT(= N_("E1171: Missing } after inline function")); INIT(= N_("E1171: Missing } after inline function"));
EXTERN char e_cannot_use_default_values_in_lambda[] EXTERN char e_cannot_use_default_values_in_lambda[]

View File

@@ -2157,8 +2157,6 @@ newline_skip_comments(char_u *arg)
break; break;
p = nl; p = nl;
} }
else if (vim9_bad_comment(p))
break;
if (*p != NL) if (*p != NL)
break; break;
++p; // skip another NL ++p; // skip another NL
@@ -2184,10 +2182,7 @@ getline_peek_skip_comments(evalarg_T *evalarg)
break; break;
p = skipwhite(next); p = skipwhite(next);
if (*p != NUL && !vim9_comment_start(p)) if (*p != NUL && !vim9_comment_start(p))
{
(void)vim9_bad_comment(p);
return next; return next;
}
if (eval_next_line(NULL, evalarg) == NULL) if (eval_next_line(NULL, evalarg) == NULL)
break; break;
} }

View File

@@ -2842,8 +2842,14 @@ parse_command_modifiers(
if (eap->nextcmd != NULL) if (eap->nextcmd != NULL)
++eap->nextcmd; ++eap->nextcmd;
} }
if (vim9script && has_cmdmod(cmod, FALSE)) if (vim9script)
{
if (has_cmdmod(cmod, FALSE))
*errormsg = _(e_command_modifier_without_command); *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; return FAIL;
} }
if (*eap->cmd == NUL) if (*eap->cmd == NUL)

View File

@@ -2668,8 +2668,12 @@ def Test_vim9_comment()
'vim9script', 'vim9script',
'# something', '# something',
'#something', '#something',
'#{something', '#{{something',
]) ])
v9.CheckScriptFailure([
'vim9script',
'#{something',
], 'E1170:')
split Xfile split Xfile
v9.CheckScriptSuccess([ v9.CheckScriptSuccess([

View File

@@ -735,6 +735,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 */
/**/
156,
/**/ /**/
155, 155,
/**/ /**/

View File

@@ -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 * This avoids that using a legacy style #{} dictionary leads to difficult to
* understand errors. * understand errors.
*/ */
int int
vim9_bad_comment(char_u *p) 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 TRUE;
} }
return FALSE; return FALSE;
@@ -194,12 +196,13 @@ vim9_bad_comment(char_u *p)
/* /*
* Return TRUE if "p" points at a "#" not followed by one '{'. * Return TRUE if "p" points at a "#" not followed by one '{'.
* Gives an error for using "#{", not for "#{{".
* Does not check for white space. * Does not check for white space.
*/ */
int int
vim9_comment_start(char_u *p) 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) #if defined(FEAT_EVAL) || defined(PROTO)