summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-08-08 19:07:37 +0200
committerBram Moolenaar <Bram@vim.org>2021-08-08 19:07:37 +0200
commit33ea9fd4d849324f1e958cc669987a51cf0baded (patch)
tree04e74ec5d77d51303670fe01b3a2ce3e6648d368
parent80a070c36125662556232ab6e83da373e22953d8 (diff)
patch 8.2.3317: Vim9: No error for missing white space before return typev8.2.3317
Problem: Vim9: No error for missing white space before return type. Solution: Check for white space. (closes #8733)
-rw-r--r--src/testdir/test_vim9_func.vim21
-rw-r--r--src/userfunc.c9
-rw-r--r--src/version.c2
3 files changed, 31 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 5704511df7..de7b980fde 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1429,6 +1429,27 @@ def Test_return_type_wrong()
'defcompile'], 'E1003:')
delfunc! g:Func
+ CheckScriptFailure([
+ 'def Func():number',
+ 'return 123',
+ 'enddef',
+ 'defcompile'], 'E1069:')
+ delfunc! g:Func
+
+ CheckScriptFailure([
+ 'def Func() :number',
+ 'return 123',
+ 'enddef',
+ 'defcompile'], 'E1059:')
+ delfunc! g:Func
+
+ CheckScriptFailure([
+ 'def Func() : number',
+ 'return 123',
+ 'enddef',
+ 'defcompile'], 'E1059:')
+ delfunc! g:Func
+
CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008:')
delfunc! g:Func
CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:')
diff --git a/src/userfunc.c b/src/userfunc.c
index 79a6621b24..7a7617f5eb 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -4066,8 +4066,15 @@ define_function(exarg_T *eap, char_u *name_arg)
if (eap->cmdidx == CMD_def)
{
// find the return type: :def Func(): type
- if (*p == ':')
+ if (*skipwhite(p) == ':')
{
+ if (*p != ':')
+ {
+ semsg(_(e_no_white_space_allowed_before_colon_str), p);
+ p = skipwhite(p);
+ }
+ else if (!IS_WHITE_OR_NUL(p[1]))
+ semsg(_(e_white_space_required_after_str_str), ":", p);
ret_type = skipwhite(p + 1);
p = skip_type(ret_type, FALSE);
if (p > ret_type)
diff --git a/src/version.c b/src/version.c
index 3e209fe272..aacefc03d7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3317,
+/**/
3316,
/**/
3315,