forked from dlang/dlang.org
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdstyle.dd
231 lines (181 loc) · 5.36 KB
/
dstyle.dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
Ddoc
$(D_S The D Style,
$(P
$(I The D Style) is a set of style conventions for writing
D programs. The D Style is not enforced by the compiler, it is
purely cosmetic and a matter of choice. Adhering to the D Style,
however, will make it easier for others to work with your
code and easier for you to work with others' code.
The D Style can form the starting point for a project
style guide customized for your project team.
)
$(P
Submissions to Phobos and other official D source code will
follow these guidelines.
)
<h3>White Space</h3>
$(UL
$(LI One statement per line.)
$(LI Use spaces instead of hardware tabs.)
$(LI Each indentation level will be four columns.)
$(LI Operators are separated by single spaces from their operands.)
$(LI Two blank lines separating function bodies.)
$(LI One blank line separating variable declarations from statements
in function bodies.)
)
<h3>Comments</h3>
$(UL
$(LI Use // comments to document a single line:
-------------------------------
statement; // comment
statement; // comment
-------------------------------
)
$(LI Use block comments to document a multiple line block of
statements:
-------------------------------
/* comment
* comment
*/
statement;
statement;
-------------------------------
)
$(LI Use $(CODE version (none)) to $(SINGLEQUOTE comment out) a piece of trial code
that is syntactically valid:
-------------------------------
version (none)
{
/* comment
* comment
*/
statement;
statement;
}
-------------------------------
It can be turned on with $(CODE version(all)):
-------------------------------
version (all)
{
/* comment
* comment
*/
statement;
statement;
}
-------------------------------
)
$(LI Use nesting comments to $(SINGLEQUOTE comment out) a piece of syntactically invalid code:
-------------------------------
/+++++
/* comment
* comment
*/
{ statement;
statement;
+++++/
-------------------------------
)
)
<h3>Naming Conventions</h3>
$(DL
$(DT General)
<dd>Names formed by joining multiple words should have each word
other than the first capitalized.
Names shall not begin with an underscore $(SINGLEQUOTE _) unless they are private member variables.
-------------------------------
int myFunc();
-------------------------------
$(DT Module)
$(DD Module and package names are all lower case, and only contain
the characters [a..z][0..9][_]. This avoids problems dealing
with case insensitive file systems.)
$(DT C Modules)
$(DD Modules that are interfaces to C functions go into the "c"
package, for example:
-------------------------------
import std.c.stdio;
-------------------------------
Module names should be all lower case.
)
$(DT Class, Struct, Union, Enum, Template names)
$(DD are capitalized.
-------------------------------
class Foo;
class FooAndBar;
-------------------------------
)
$(DD An exception is that eponymous templates that return a value instead of a type should not be
capitalized, as they are conceptually more similar to functions.
-------------------------
template GetSomeType(T) {}
template isSomeType(T) {}
-------------------------
)
$(DT Function names)
$(DD Function names are not capitalized.
-------------------------------
int done();
int doneProcessing();
-------------------------------
)
$(V1
$(DT Const names)
$(DD Are in all caps.)
)
$(DT Enum member names)
$(DD Are in lowerCamelCase.)
)
<h3>Meaningless Type Aliases</h3>
$(P Things like:)
-------------------------------
alias void VOID;
alias int INT;
alias int* pint;
-------------------------------
$(P should be avoided.)
<h3>Declaration Style</h3>
$(P Since the declarations are left-associative, left justify them:)
-------------------------------
int[] x, y; // makes it clear that x and y are the same type
int** p, q; // makes it clear that p and q are the same type
-------------------------------
$(P to emphasize their relationship. Do not use the C style:)
-------------------------------
int []x, y; // confusing since y is also an int[]
int **p, q; // confusing since q is also an int**
-------------------------------
<h3>Operator Overloading</h3>
$(P Operator overloading is a powerful tool to extend the basic
types supported by the language. But being powerful, it has
great potential for creating obfuscated code. In particular,
the existing D operators have conventional meanings, such
as $(SINGLEQUOTE +) means $(SINGLEQUOTE add) and $(SINGLEQUOTE <<)
means $(SINGLEQUOTE shift left).
Overloading operator $(SINGLEQUOTE +) with a meaning different from $(SINGLEQUOTE add)
is arbitrarily confusing and should be avoided.
)
<h3>Hungarian Notation</h3>
$(P Using hungarian notation to denote the type of a variable
is a bad idea.
However, using notation to denote the purpose of a variable
(that cannot be expressed by its type) is often a good
practice.)
<h3>Documentation</h3>
$(P
All public declarations will be documented in
$(LINK2 ddoc.html, Ddoc) format.
)
<h3>Unit Tests</h3>
$(P
As much as practical, all functions will be exercised
by unit tests using unittest blocks immediately following
the function to be tested.
Every path of code should be executed at least once,
verified by the $(LINK2 code_coverage.html, code coverage analyzer).
)
)
Macros:
TITLE=The D Style
WIKI=DStyle
CATEGORY_APPENDICES=$0