forked from aniani/vim
patch 8.2.0612: Vim9: no check for space before #comment
Problem: Vim9: no check for space before #comment. Solution: Add space checks.
This commit is contained in:
parent
faac410409
commit
2c5ed4e330
@ -451,12 +451,9 @@ ex_sort(exarg_T *eap)
|
||||
}
|
||||
else if (!ASCII_ISALPHA(*p) && regmatch.regprog == NULL)
|
||||
{
|
||||
s = skip_regexp(p + 1, *p, TRUE);
|
||||
if (*s != *p)
|
||||
{
|
||||
emsg(_(e_invalpat));
|
||||
s = skip_regexp_err(p + 1, *p, TRUE);
|
||||
if (s == NULL)
|
||||
goto sortend;
|
||||
}
|
||||
*s = NUL;
|
||||
// Use last search pattern if sort pattern is empty.
|
||||
if (s == p + 1)
|
||||
|
@ -1021,12 +1021,12 @@ ex_else(exarg_T *eap)
|
||||
if (eap->cmdidx == CMD_elseif)
|
||||
{
|
||||
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
|
||||
|
||||
// When throwing error exceptions, we want to throw always the first
|
||||
// of several errors in a row. This is what actually happens when
|
||||
// a conditional error was detected above and there is another failure
|
||||
// when parsing the expression. Since the skip flag is set in this
|
||||
// case, the parsing error will be ignored by emsg().
|
||||
|
||||
if (!skip && !error)
|
||||
{
|
||||
if (result)
|
||||
@ -1518,7 +1518,7 @@ ex_catch(exarg_T *eap)
|
||||
&cstack->cs_looplevel);
|
||||
}
|
||||
|
||||
if (ends_excmd(*eap->arg)) // no argument, catch all errors
|
||||
if (ends_excmd2(eap->cmd, eap->arg)) // no argument, catch all errors
|
||||
{
|
||||
pat = (char_u *)".*";
|
||||
end = NULL;
|
||||
@ -1527,7 +1527,9 @@ ex_catch(exarg_T *eap)
|
||||
else
|
||||
{
|
||||
pat = eap->arg + 1;
|
||||
end = skip_regexp(pat, *eap->arg, TRUE);
|
||||
end = skip_regexp_err(pat, *eap->arg, TRUE);
|
||||
if (end == NULL)
|
||||
give_up = TRUE;
|
||||
}
|
||||
|
||||
if (!give_up)
|
||||
@ -1548,7 +1550,8 @@ ex_catch(exarg_T *eap)
|
||||
if (!skip && (cstack->cs_flags[idx] & CSF_THROWN)
|
||||
&& !(cstack->cs_flags[idx] & CSF_CAUGHT))
|
||||
{
|
||||
if (end != NULL && *end != NUL && !ends_excmd(*skipwhite(end + 1)))
|
||||
if (end != NULL && *end != NUL
|
||||
&& !ends_excmd2(end, skipwhite(end + 1)))
|
||||
{
|
||||
emsg(_(e_trailing));
|
||||
return;
|
||||
|
@ -5036,7 +5036,7 @@ ex_gui(exarg_T *eap)
|
||||
// of the argument ending up after the shell prompt.
|
||||
msg_clr_eos_force();
|
||||
#ifdef GUI_MAY_SPAWN
|
||||
if (!ends_excmd(*eap->arg))
|
||||
if (!ends_excmd2(eap->cmd, eap->arg))
|
||||
gui_start(eap->arg);
|
||||
else
|
||||
#endif
|
||||
@ -5045,7 +5045,7 @@ ex_gui(exarg_T *eap)
|
||||
channel_gui_register_all();
|
||||
#endif
|
||||
}
|
||||
if (!ends_excmd(*eap->arg))
|
||||
if (!ends_excmd2(eap->cmd, eap->arg))
|
||||
ex_next(eap);
|
||||
}
|
||||
|
||||
|
@ -658,7 +658,7 @@ do_highlight(
|
||||
/*
|
||||
* If no argument, list current highlighting.
|
||||
*/
|
||||
if (ends_excmd(*line))
|
||||
if (!init && ends_excmd2(line - 1, line))
|
||||
{
|
||||
for (i = 1; i <= highlight_ga.ga_len && !got_int; ++i)
|
||||
// TODO: only call when the group has attributes set
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* regexp.c */
|
||||
int re_multiline(regprog_T *prog);
|
||||
char_u *skip_regexp(char_u *startp, int dirc, int magic);
|
||||
char_u *skip_regexp(char_u *startp, int delim, int magic);
|
||||
char_u *skip_regexp_err(char_u *startp, int delim, int magic);
|
||||
char_u *skip_regexp_ex(char_u *startp, int dirc, int magic, char_u **newp, int *dropped);
|
||||
reg_extmatch_T *ref_extmatch(reg_extmatch_T *em);
|
||||
void unref_extmatch(reg_extmatch_T *em);
|
||||
|
26
src/regexp.c
26
src/regexp.c
@ -534,17 +534,37 @@ skip_anyof(char_u *p)
|
||||
|
||||
/*
|
||||
* Skip past regular expression.
|
||||
* Stop at end of "startp" or where "dirc" is found ('/', '?', etc).
|
||||
* Stop at end of "startp" or where "delim" is found ('/', '?', etc).
|
||||
* Take care of characters with a backslash in front of it.
|
||||
* Skip strings inside [ and ].
|
||||
*/
|
||||
char_u *
|
||||
skip_regexp(
|
||||
char_u *startp,
|
||||
int dirc,
|
||||
int delim,
|
||||
int magic)
|
||||
{
|
||||
return skip_regexp_ex(startp, dirc, magic, NULL, NULL);
|
||||
return skip_regexp_ex(startp, delim, magic, NULL, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call skip_regexp() and when the delimiter does not match give an error and
|
||||
* return NULL.
|
||||
*/
|
||||
char_u *
|
||||
skip_regexp_err(
|
||||
char_u *startp,
|
||||
int delim,
|
||||
int magic)
|
||||
{
|
||||
char_u *p = skip_regexp(startp, delim, magic);
|
||||
|
||||
if (*p != delim)
|
||||
{
|
||||
semsg(_("E654: missing delimiter after search pattern: %s"), startp);
|
||||
return NULL;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1255,7 +1255,7 @@ func Test_sort_cmd()
|
||||
call setline(1, ['line1', 'line2'])
|
||||
call assert_fails('sort no', 'E474:')
|
||||
call assert_fails('sort c', 'E475:')
|
||||
call assert_fails('sort #pat%', 'E682:')
|
||||
call assert_fails('sort #pat%', 'E654:')
|
||||
|
||||
enew!
|
||||
endfunc
|
||||
|
@ -1153,22 +1153,76 @@ def Test_vim9_comment()
|
||||
|
||||
CheckDefFailure([
|
||||
'try# comment',
|
||||
'echo "yes"',
|
||||
' echo "yes"',
|
||||
'catch',
|
||||
'endtry',
|
||||
], 'E488:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'try# comment',
|
||||
'echo "yes"',
|
||||
], 'E488:')
|
||||
CheckDefFailure([
|
||||
'try',
|
||||
'echo "yes"',
|
||||
' echo "yes"',
|
||||
'catch# comment',
|
||||
'endtry',
|
||||
], 'E488:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'try',
|
||||
' echo "yes"',
|
||||
'catch# comment',
|
||||
'endtry',
|
||||
], 'E654:')
|
||||
CheckDefFailure([
|
||||
'try',
|
||||
' echo "yes"',
|
||||
'catch /pat/# comment',
|
||||
'endtry',
|
||||
], 'E488:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'try',
|
||||
' throw "pat"',
|
||||
'catch /pat/# comment',
|
||||
'endtry',
|
||||
], 'E605:')
|
||||
CheckDefFailure([
|
||||
'try',
|
||||
'echo "yes"',
|
||||
'catch',
|
||||
'endtry# comment',
|
||||
], 'E488:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'try',
|
||||
' echo "yes"',
|
||||
'catch',
|
||||
'endtry# comment',
|
||||
], 'E600:')
|
||||
|
||||
CheckScriptSuccess([
|
||||
'vim9script',
|
||||
'hi # comment',
|
||||
])
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'hi# comment',
|
||||
], 'E416:')
|
||||
enddef
|
||||
|
||||
def Test_vim9_comment_gui()
|
||||
CheckCanRunGui
|
||||
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'gui#comment'
|
||||
], 'E499:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'gui -f#comment'
|
||||
], 'E499:')
|
||||
enddef
|
||||
|
||||
def Test_vim9_comment_not_compiled()
|
||||
|
@ -746,6 +746,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
612,
|
||||
/**/
|
||||
611,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user