Skip to content

Commit 44831e4

Browse files
yegappanchrisbra
authored andcommitted
runtime(doc): Update the 'specifies' keyword documentation, slightly reformat
closes: #16648 Signed-off-by: Yegappan Lakshmanan <[email protected]> Signed-off-by: Christian Brabandt <[email protected]>
1 parent c0f0e23 commit 44831e4

1 file changed

Lines changed: 11 additions & 22 deletions

File tree

runtime/doc/vim9class.txt

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
*vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 11
1+
*vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 16
22

33

44
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -52,7 +52,6 @@ An interface is used to specify properties of an object:
5252
The class hierarchy allows for single inheritance. Otherwise interfaces are
5353
to be used where needed.
5454

55-
5655
Class modeling ~
5756

5857
You can model classes any way you like. Keep in mind what you are building,
@@ -122,7 +121,6 @@ using the object name followed by a dot following by the member: >
122121
A class name cannot be used as an expression. A class name cannot be used in
123122
the left-hand-side of an assignment.
124123

125-
126124
Object variable write access ~
127125
*read-only-variable*
128126
Now try to change an object variable directly: >
@@ -626,13 +624,15 @@ once. They can appear in any order, although this order is recommended: >
626624
extends ClassName
627625
implements InterfaceName, OtherInterface
628626
specifies SomeInterface
629-
< *E1355* *E1369*
627+
<
628+
The "specifies" feature is currently not implemented.
629+
630+
*E1355* *E1369*
630631
Each variable and method name can be used only once. It is not possible to
631632
define a method with the same name and different type of arguments. It is not
632633
possible to use a public and protected member variable with the same name. An
633634
object variable name used in a super class cannot be reused in a child class.
634635

635-
636636
Object Variable Initialization ~
637637

638638
If the type of a variable is not explicitly specified in a class, then it is
@@ -689,13 +689,12 @@ A class can implement one or more interfaces. The "implements" keyword can
689689
only appear once *E1350* . Multiple interfaces can be specified, separated by
690690
commas. Each interface name can appear only once. *E1351*
691691

692-
693692
A class defining an interface ~
694693
*specifies*
695694
A class can declare its interface, the object variables and methods, with a
696695
named interface. This avoids the need for separately specifying the
697696
interface, which is often done in many languages, especially Java.
698-
697+
TODO: This is currently not implemented.
699698

700699
Items in a class ~
701700
*E1318* *E1325* *E1388*
@@ -736,25 +735,25 @@ Some of the builtin functions like |empty()|, |len()| and |string()| can be
736735
used with an object. An object can implement a method with the same name as
737736
these builtin functions to return an object-specific value.
738737

739-
*E1412*
738+
*E1412*
740739
The following builtin methods are supported:
741-
*object-empty()*
740+
*object-empty()*
742741
empty() Invoked by the |empty()| function to check whether an object is
743742
empty. If this method is missing, then true is returned. This
744743
method should not accept any arguments and must return a boolean.
745-
*object-len()*
744+
*object-len()*
746745
len() Invoked by the |len()| function to return the length of an
747746
object. If this method is missing in the class, then an error is
748747
given and zero is returned. This method should not accept any
749748
arguments and must return a number.
750-
*object-string()*
749+
*object-string()*
751750
string() Invoked by the |string()| function to get a textual
752751
representation of an object. Also used by the |:echo| command
753752
for an object. If this method is missing in the class, then a
754753
built-in default textual representation is used. This method
755754
should not accept any arguments and must return a string.
756755

757-
*E1413*
756+
*E1413*
758757
A class method cannot be used as a builtin method.
759758

760759
Defining an interface ~
@@ -786,7 +785,6 @@ An interface can only be defined in a |Vim9| script file. *E1342*
786785
An interface cannot "implement" another interface but it can "extend" another
787786
interface. *E1381*
788787

789-
790788
null object ~
791789

792790
When a variable is declared to have the type of an object, but it is not
@@ -795,7 +793,6 @@ does not know what class was supposed to be used. Vim then cannot check if
795793
a variable name is correct and you will get a "Using a null object" error,
796794
even when the variable name is invalid. *E1360* *E1362*
797795

798-
799796
Default constructor ~
800797
*default-constructor*
801798
In case you define a class without a new() method, one will be automatically
@@ -1118,7 +1115,6 @@ For |Vim9| script using the same method name for all constructors seemed like
11181115
the right choice, and by calling it new() the relation between the caller and
11191116
the method being called is obvious.
11201117

1121-
11221118
No overloading of the constructor ~
11231119

11241120
In Vim script, both legacy and |Vim9| script, there is no overloading of
@@ -1139,7 +1135,6 @@ That way multiple constructors with different arguments are possible, while it
11391135
is very easy to see which constructor is being used. And the type of
11401136
arguments can be properly checked.
11411137

1142-
11431138
No overloading of methods ~
11441139

11451140
Same reasoning as for the constructor: It is often not obvious what type
@@ -1148,7 +1143,6 @@ actually being called. Better just give the methods a different name, then
11481143
type checking will make sure it works as you intended. This rules out
11491144
polymorphism, which we don't really need anyway.
11501145

1151-
11521146
Single inheritance and interfaces ~
11531147

11541148
Some languages support multiple inheritance. Although that can be useful in
@@ -1164,7 +1158,6 @@ it will be checked if that change was also changed. The mechanism to assume a
11641158
class implements an interface just because the methods happen to match is
11651159
brittle and leads to obscure problems, let's not do that.
11661160

1167-
11681161
Using "this.variable" everywhere ~
11691162

11701163
The object variables in various programming languages can often be accessed in
@@ -1183,7 +1176,6 @@ variables. Simple and consistent. When looking at the code inside a class
11831176
it's also directly clear which variable references are object variables and
11841177
which aren't.
11851178

1186-
11871179
Using class variables ~
11881180

11891181
Using "static variable" to declare a class variable is very common, nothing
@@ -1197,7 +1189,6 @@ the class. This has two problems: The class name can be rather long, taking
11971189
up quite a bit of space, and when the class is renamed all these places need
11981190
to be changed too.
11991191

1200-
12011192
Declaring object and class variables ~
12021193

12031194
The main choice is whether to use "var" as with variable declarations.
@@ -1251,7 +1242,6 @@ function declaration syntax for class/object variables and methods. Vim9 also
12511242
reuses the general function declaration syntax for methods. So, for the sake
12521243
of consistency, we require "var" in these declarations.
12531244

1254-
12551245
Using "ClassName.new()" to construct an object ~
12561246

12571247
Many languages use the "new" operator to create an object, which is actually
@@ -1315,7 +1305,6 @@ An alternative would have been using the "protected" keyword, just like
13151305
"public" changes the access in the other direction. Well, that's just to
13161306
reduce the number of keywords.
13171307

1318-
13191308
No private object variables ~
13201309

13211310
Some languages provide several ways to control access to object variables.

0 commit comments

Comments
 (0)