patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored

Commit: 
https://github.com/vim/vim/commit/ac7731895c996acef4d02b784f9952749226e203
Author: Yegappan Lakshmanan <yegap...@yahoo.com>
Date:   Sat Apr 27 11:36:12 2024 +0200

    patch 9.1.0376: Vim9: Trailing commands after class/enum keywords ignored
    
    Problem:  Vim9: Trailing commands after class/enum keywords ignored
    Solution: Remove EX_TRLBAR keyword from command definition
              (Yegappan Lakshmanan)
    
    closes: #14649
    
    Signed-off-by: Yegappan Lakshmanan <yegap...@yahoo.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index 13c4d729b..6a7515a76 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 9.1.  Last change: 2023 Dec 09
+*cmdline.txt*   For Vim version 9.1.  Last change: 2024 Apr 27
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -650,6 +650,12 @@ followed by another Vim command:
     :[range]!
     a user defined command without the "-bar" argument |:command|
 
+    and the following |Vim9-script| keywords: 
+    :abstract
+    :class
+    :enum
+    :interface
+
 Note that this is confusing (inherited from Vi): With ":g" the '|' is included
 in the command, with ":s" it is not.
 
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 70e57708f..40dec4ce4 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -129,7 +129,7 @@ EXCMD(CMD_aboveleft,        "aboveleft",    
ex_wrongmodifier,
        EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
        ADDR_NONE),
 EXCMD(CMD_abstract,    "abstract",     ex_class,
-       EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+       EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
        ADDR_NONE),
 EXCMD(CMD_all,         "all",          ex_all,
        EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR,
@@ -357,7 +357,7 @@ EXCMD(CMD_clast,    "clast",        ex_cc,
        EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
        ADDR_UNSIGNED),
 EXCMD(CMD_class,       "class",        ex_class,
-       EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+       EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
        ADDR_NONE),
 EXCMD(CMD_close,       "close",        ex_close,
        EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
@@ -597,7 +597,7 @@ EXCMD(CMD_enew,             "enew",         ex_edit,
        EX_BANG|EX_TRLBAR,
        ADDR_NONE),
 EXCMD(CMD_enum,                "enum",         ex_class,
-       EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+       EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
        ADDR_NONE),
 EXCMD(CMD_eval,                "eval",         ex_eval,
        EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
@@ -759,7 +759,7 @@ EXCMD(CMD_intro,    "intro",        ex_intro,
        EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
        ADDR_NONE),
 EXCMD(CMD_interface,   "interface",    ex_class,
-       EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+       EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
        ADDR_NONE),
 EXCMD(CMD_isearch,     "isearch",      ex_findpat,
        EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 5957f57ae..bd06c6e28 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -67,6 +67,42 @@ def Test_class_basic()
   END
   v9.CheckSourceFailure(lines, "E488: Trailing characters: | echo 'done'", 3)
 
+  # Additional command after "class name"
+  lines =<< trim END
+    vim9script
+    class Something | var x = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, "E488: Trailing characters: | var x = 10", 2)
+
+  # Additional command after "object variable"
+  lines =<< trim END
+    vim9script
+    class Something
+      var l: list<number> = [] | var y = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, "E488: Trailing characters: | var y = 10", 3)
+
+  # Additional command after "class variable"
+  lines =<< trim END
+    vim9script
+    class Something
+      static var d = {a: 10} | var y = 10
+    endclass
+  END
+  v9.CheckSourceFailure(lines, "E488: Trailing characters: | var y = 10", 3)
+
+  # Additional command after "object method"
+  lines =<< trim END
+    vim9script
+    class Something
+      def Foo() | var y = 10
+      enddef
+    endclass
+  END
+  v9.CheckSourceFailure(lines, "E488: Trailing characters: | var y = 10", 3)
+
   # Try to define a class with the same name as an existing variable
   lines =<< trim END
     vim9script
@@ -2237,6 +2273,14 @@ def Test_interface_basics()
   END
   v9.CheckSourceFailure(lines, 'E1345: Not a valid command in an interface: 
return 5', 6)
 
+  # Additional commands after "interface name"
+  lines =<< trim END
+    vim9script
+    interface Something | var x = 10 | var y = 20
+    endinterface
+  END
+  v9.CheckSourceFailure(lines, "E488: Trailing characters: | var x = 10", 2)
+
   lines =<< trim END
     vim9script
     export interface EnterExit
@@ -3233,6 +3277,14 @@ def Test_abstract_class()
   END
   v9.CheckSourceFailure(lines, 'E1316: Class can only be defined in Vim9 
script', 1)
 
+  # Additional commands after "abstract class"
+  lines =<< trim END
+    vim9script
+    abstract class Something | var x = []
+    endclass
+  END
+  v9.CheckSourceFailure(lines, "E488: Trailing characters: | var x = []", 2)
+
   # Abstract class cannot have a "new" function
   lines =<< trim END
     vim9script
diff --git a/src/testdir/test_vim9_enum.vim b/src/testdir/test_vim9_enum.vim
index 274b556b7..bc54bee3a 100644
--- a/src/testdir/test_vim9_enum.vim
+++ b/src/testdir/test_vim9_enum.vim
@@ -97,7 +97,16 @@ def Test_enum_parse()
     vim9script
     enum Something | endenum
   END
-  v9.CheckSourceFailure(lines, 'E1420: Missing :endenum', 3)
+  v9.CheckSourceFailure(lines, 'E488: Trailing characters: | endenum', 2)
+
+  # another command follows the enum name
+  lines =<< trim END
+    vim9script
+    enum Something | var x = 10
+      Foo
+    endenum
+  END
+  v9.CheckSourceFailure(lines, 'E488: Trailing characters: | var x = 10', 2)
 
   # Try to define an enum with the same name as an existing variable
   lines =<< trim END
diff --git a/src/testdir/test_vim9_typealias.vim 
b/src/testdir/test_vim9_typealias.vim
index 998079cf6..cf540c230 100644
--- a/src/testdir/test_vim9_typealias.vim
+++ b/src/testdir/test_vim9_typealias.vim
@@ -172,6 +172,14 @@ def Test_typealias()
   END
   v9.CheckSourceSuccess(lines)
 
+  # another command follows a type alias
+  lines =<< trim END
+    vim9script
+    type MyType = number | var x = 20
+    assert_equal(20, x)
+  END
+  v9.CheckSourceSuccess(lines)
+
   # Sourcing a script twice (which will free script local variables)
   # Uses "lines" from the previous test
   new
diff --git a/src/version.c b/src/version.c
index c000e5989..cac24ffb5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    376,
 /**/
     375,
 /**/
diff --git a/src/vim9class.c b/src/vim9class.c
index 52c2f764d..4314b5290 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -136,6 +136,13 @@ parse_member(
        fill_evalarg_from_eap(&evalarg, eap, FALSE);
        (void)skip_expr_concatenate(&init_arg, &expr_start, &expr_end, 
&evalarg);
 
+       init_arg = skipwhite(init_arg);
+       if (*init_arg != NUL)
+       {
+           semsg(_(e_trailing_characters_str), init_arg);
+           return FAIL;
+       }
+
        // No type specified for the member.  Set it to "any" and the correct
        // type will be set when the object is instantiated.
        if (type == NULL)

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1s0eqh-000H30-K4%40256bit.org.

Raspunde prin e-mail lui