patch 9.1.0985: Vim9: some ex commands can be shortened

Problem:  Vim9: some ex commands can be shortened
Solution: disallow shortening of :abstract, :interface and :type
          (h-east)

closes: #16356

Signed-off-by: h-east <h.east.727@gmail.com>
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 92a40f2..d217cd9 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -129,7 +129,7 @@
 	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
 	ADDR_NONE),
 EXCMD(CMD_abstract,	"abstract",	ex_class,
-	EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+	EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|EX_EXPORT,
 	ADDR_NONE),
 EXCMD(CMD_all,		"all",		ex_all,
 	EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR,
@@ -759,7 +759,7 @@
 	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
 	ADDR_NONE),
 EXCMD(CMD_interface,	"interface",	ex_class,
-	EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+	EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|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,
@@ -1677,7 +1677,7 @@
 	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
 	ADDR_NONE),
 EXCMD(CMD_type,		"type",		ex_type,
-	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
+	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|EX_EXPORT,
 	ADDR_NONE),
 EXCMD(CMD_undo,		"undo",		ex_undo,
 	EX_RANGE|EX_COUNT|EX_ZEROR|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 309898b..4a7962a 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -2386,6 +2386,22 @@
   END
   v9.CheckSourceFailure(lines, 'E1345: Not a valid command in an interface: return 5', 6)
 
+  # Test for "interface" cannot be abbreviated
+  lines =<< trim END
+    vim9script
+    inte Something
+    endinterface
+  END
+  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: inte Something', 2)
+
+  # Test for "endinterface" cannot be abbreviated
+  lines =<< trim END
+    vim9script
+    interface Something
+    endin
+  END
+  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: endin', 3)
+
   # Additional commands after "interface name"
   lines =<< trim END
     vim9script
@@ -3525,6 +3541,14 @@
   END
   v9.CheckSourceFailure(lines, 'E1316: Class can only be defined in Vim9 script', 1)
 
+  # Test for "abstract" cannot be abbreviated
+  lines =<< trim END
+    vim9script
+    abs class A
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: abs class A', 2)
+
   # Additional commands after "abstract class"
   lines =<< trim END
     vim9script
diff --git a/src/testdir/test_vim9_typealias.vim b/src/testdir/test_vim9_typealias.vim
index 2792d45..6cc0470 100644
--- a/src/testdir/test_vim9_typealias.vim
+++ b/src/testdir/test_vim9_typealias.vim
@@ -48,6 +48,13 @@
   END
   v9.CheckSourceFailure(lines, 'E1393: Type can only be defined in Vim9 script', 1)
 
+  # The complete "type" should be specified
+  lines =<< trim END
+    vim9script
+    typ Index = number
+  END
+  v9.CheckSourceFailure(lines, 'E1065: Command cannot be shortened: typ Index = number', 2)
+
   # Use :type without any arguments
   lines =<< trim END
     vim9script
diff --git a/src/version.c b/src/version.c
index cb1129d..d446b6f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    985,
+/**/
     984,
 /**/
     983,
diff --git a/src/vim9class.c b/src/vim9class.c
index e85cf82..22db751 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1738,6 +1738,7 @@
 
 /*
  * Handle ":class" and ":abstract class" up to ":endclass".
+ * Handle ":enum" up to ":endenum".
  * Handle ":interface" up to ":endinterface".
  */
     void