diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-22 18:17:08 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-22 18:17:08 +0200 |
commit | e7e4838f25ac39177f3c3150ee53af8d6e8a0f28 (patch) | |
tree | 6790f121a4ad9c1fa3558c40b7aac83ede5bccc7 | |
parent | 2690b5aed8b6b6070430b05dcae296cd9479c942 (diff) |
patch 8.2.1268: Vim9: no error for using double quote commentv8.2.1268
Problem: Vim9: no error for using double quote comment after :func or :def.
Solution: Only accept double quote when not in Vim9 script and not after
:def. (closes #6483)
-rw-r--r-- | src/testdir/test_vim9_script.vim | 29 | ||||
-rw-r--r-- | src/userfunc.c | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 40 insertions, 4 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 59727a2fd4..5fec8a2746 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2198,6 +2198,35 @@ def Test_vim9_comment() 'vim9script', 'call execute("ls")# comment', ], 'E488:') + + CheckScriptFailure([ + 'def Test() " comment', + 'enddef', + ], 'E488:') + CheckScriptFailure([ + 'vim9script', + 'def Test() " comment', + 'enddef', + ], 'E488:') + + CheckScriptSuccess([ + 'func Test() " comment', + 'endfunc', + ]) + CheckScriptFailure([ + 'vim9script', + 'func Test() " comment', + 'endfunc', + ], 'E488:') + + CheckScriptSuccess([ + 'def Test() # comment', + 'enddef', + ]) + CheckScriptFailure([ + 'func Test() # comment', + 'endfunc', + ], 'E488:') enddef def Test_vim9_comment_gui() diff --git a/src/userfunc.c b/src/userfunc.c index eda1f242f5..3967d2743d 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -2555,8 +2555,9 @@ def_function(exarg_T *eap, char_u *name_arg) int is_heredoc = FALSE; char_u *skip_until = NULL; char_u *heredoc_trimmed = NULL; + int vim9script = in_vim9script(); - if (in_vim9script() && eap->forceit) + if (vim9script && eap->forceit) { emsg(_(e_nobang)); return NULL; @@ -2786,6 +2787,7 @@ def_function(exarg_T *eap, char_u *name_arg) ret_type = NULL; } } + p = skipwhite(p); } else // find extra arguments "range", "dict", "abort" and "closure" @@ -2826,8 +2828,11 @@ def_function(exarg_T *eap, char_u *name_arg) // Makes 'exe "func Test()\n...\nendfunc"' work. if (*p == '\n') line_arg = p + 1; - else if (*p != NUL && *p != '"' && !(eap->cmdidx == CMD_def && *p == '#') - && !eap->skip && !did_emsg) + else if (*p != NUL + && !(*p == '"' && !(vim9script || eap->cmdidx == CMD_def)) + && !(*p == '#' && (vim9script || eap->cmdidx == CMD_def)) + && !eap->skip + && !did_emsg) emsg(_(e_trailing)); /* @@ -3386,7 +3391,7 @@ def_function(exarg_T *eap, char_u *name_arg) fp->uf_varargs = varargs; if (sandbox) flags |= FC_SANDBOX; - if (in_vim9script() && !ASCII_ISUPPER(*fp->uf_name)) + if (vim9script && !ASCII_ISUPPER(*fp->uf_name)) flags |= FC_VIM9; fp->uf_flags = flags; fp->uf_calls = 0; diff --git a/src/version.c b/src/version.c index e4e70243b6..1ab604036b 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1268, +/**/ 1267, /**/ 1266, |