blob: 777cc1de3e409a69581ae44a9432d8634dc114e6 [file] [log] [blame]
mbligh71d338a2007-10-08 05:05:50 +00001These rules are fairly standard and boring. People will bitch about something
2in here, no doubt. Get over it. Much of this was stolen from the Linux Kernel
3coding style, because most of it makes good sense. If you disagree, that's OK,
4but please stick to the rules anyway ;-)
5
6
7Language
8
9Please use Python where possible. It's not the ideal language for everything,
10but it's pretty good, and consistency goes a long way in making the project
11maintainable. (Obviously using C or whatever for writing tests is fine).
12
13
mbligh2ac475b2008-09-09 21:37:40 +000014Base coding style
15
mbligh52207362009-09-03 20:54:29 +000016When writing python code, unless otherwise stated, stick to the python style
mbligh2ac475b2008-09-09 21:37:40 +000017guide (http://www.python.org/dev/peps/pep-0008/).
18
19
mbligh71d338a2007-10-08 05:05:50 +000020Indentation & whitespace
21
22Format your code for an 80 character wide screen.
23
mblighc960fcf2008-06-18 19:58:57 +000024Indentation is now 4 spaces, as opposed to hard tabs (which it used to be).
25This is the Python standard.
mbligh71d338a2007-10-08 05:05:50 +000026
27Don't leave trailing whitespace, or put whitespace on blank lines.
28Leave TWO blank lines between functions - this is Python, there are no clear
29function end markers, and we need help.
30
31
32Variable names and UpPeR cAsE
33
mbligh52207362009-09-03 20:54:29 +000034Use descriptive variable names where possible - it helps to make the code
mbligh71d338a2007-10-08 05:05:50 +000035self documenting.
36
37Don't use CamelCaps style in most places - use underscores to separate parts
38of your variable_names please. I shall make a bedgrudging exception for class
39names I suppose, but I'll still whine about it a lot.
40
jamesrend0e17162010-07-29 17:37:32 +000041Importing modules
42
43The order of imports should be as follows:
44
45Standard python modules
46Non-standard python modules
47Autotest modules
48
49Within one of these three sections, all module imports using the from
50keyword should appear after regular imports.
51Modules should be lumped together on the same line.
52Wildcard imports (from x import *) should be avoided if possible.
53Classes should not be imported from modules, but modules may be imported
54 from packages, i.e.:
55from common_lib import error
56and not
57from common_lib.error import AutoservError
58
59For example:
60import os, pickle, random, re, select, shutil, signal, StringIO, subprocess
61import sys, time, urllib, urlparse
62import MySQLdb
63from common_lib import error
64
mblighd876f452008-12-03 15:09:17 +000065
mbligh7654c822008-04-04 15:12:48 +000066Importing modules
67
68The order of imports should be as follows:
69
70Standard python modules
71Non-standard python modules
72Autotest modules
73
74Within one of these three sections, all module imports using the from
75keyword should appear after regular imports.
76Modules should be lumped together on the same line.
77Wildcard imports (from x import *) should be avoided if possible.
78Classes should not be imported from modules, but modules may be imported
79 from packages, i.e.:
80from common_lib import error
81and not
82from common_lib.error import AutoservError
83
84For example:
85import os, pickle, random, re, select, shutil, signal, StringIO, subprocess
86import sys, time, urllib, urlparse
mbligh8bcd23a2009-02-03 19:14:06 +000087import common # Magic autotest_lib module and sys.path setup code.
88import MySQLdb # After common so that we check our site-packages first.
mbligh7654c822008-04-04 15:12:48 +000089from common_lib import error
90
mblighd876f452008-12-03 15:09:17 +000091Testing None
92
93Use "is None" rather than "== None" and "is not None" rather than "!= None".
mbligh52207362009-09-03 20:54:29 +000094This way you'll never run into a case where someone's __eq__ or __ne__
mblighd876f452008-12-03 15:09:17 +000095method do the wrong thing
96
mbligh71d338a2007-10-08 05:05:50 +000097
98Comments
99
100Generally, you want your comments to tell WHAT your code does, not HOW.
101We can figure out how from the code itself (or if not, your code needs fixing).
102
103Try to describle the intent of a function and what it does in a triple-quoted
104(multiline) string just after the def line. We've tried to do that in most
mbligh52207362009-09-03 20:54:29 +0000105places, though undoubtedly we're not perfect. A high level overview is
mbligh71d338a2007-10-08 05:05:50 +0000106incredibly helpful in understanding code.
107
108
mbligh5cad50f2009-06-08 16:50:51 +0000109Docstrings
110
111Docstrings are important to keep our code self documenting. While it's not
112necessary to overdo documentation, we ask you to be sensible and document any
113nontrivial function. When creating docstrings, please add a newline at the
showard25f056a2009-11-23 20:22:50 +0000114beginning of your triple quoted string and another newline at the end of it. If
115the docstring has multiple lines, please include a short summary line followed
116by a blank line before continuing with the rest of the description. Please
117capitalize and punctuate accordingly the sentences. If the description has
118multiple lines, put two levels of indentation before proceeding with text. An
119example docstring:
mbligh5cad50f2009-06-08 16:50:51 +0000120
121def foo(param1, param2):
mbligh52207362009-09-03 20:54:29 +0000122 """
showard25f056a2009-11-23 20:22:50 +0000123 Summary line.
124
mbligh52207362009-09-03 20:54:29 +0000125 Long description of method foo.
mbligh5cad50f2009-06-08 16:50:51 +0000126
mbligh52207362009-09-03 20:54:29 +0000127 @param param1: A thing called param1 that is used for a bunch of stuff
128 that has methods bar() and baz() which raise SpamError if
129 something goes awry.
mbligh3bdba922010-05-03 18:02:54 +0000130 @return a list of integers describing changes in a source tree
mbligh52207362009-09-03 20:54:29 +0000131 ...
132 """
mbligh5cad50f2009-06-08 16:50:51 +0000133
134The tags that you can put inside your docstring are tags recognized by systems
135like doxygen. Not all places need all tags defined, so choose them wisely while
136writing code.
137
138@author - Code author
139@param - Parameter description
140@return - Return value description
141@see - Reference to what you have done
142@todo - Things that still need to be worked out
143@version - Version string
144@warning - Call attention to potential problems with the code
145@raises - If the function can throw an exception, this tag documents the
146possible exception types.
147
mbligh3bdba922010-05-03 18:02:54 +0000148When in doubt refer to: http://doxygen.nl/commands.html
149
mbligh71d338a2007-10-08 05:05:50 +0000150Simple code
151
152Keep it simple; this is not the right place to show how smart you are. We
153have plenty of system failures to deal with without having to spend ages
154figuring out your code, thanks ;-) Readbility, readability, readability.
mbligh52207362009-09-03 20:54:29 +0000155I really don't care if other things are more compact.
mbligh71d338a2007-10-08 05:05:50 +0000156
157"Debugging is twice as hard as writing the code in the first place. Therefore,
mbligh52207362009-09-03 20:54:29 +0000158if you write the code as cleverly as possible, you are, by definition, not
mbligh71d338a2007-10-08 05:05:50 +0000159smart enough to debug it." Brian Kernighan
160
161
162Function length
163
164Please keep functions short, under 30 lines or so if possible. Even though
165you are amazingly clever, and can cope with it, the rest of us are all stupid,
166so be nice and help us out. To quote the Linux Kernel coding style:
167
168Functions should be short and sweet, and do just one thing. They should
169fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
170as we all know), and do one thing and do that well.
171
172
mbligh900b6c12008-01-14 16:56:47 +0000173Exceptions
174
175When raising exceptions, the preferred syntax for it is:
176
177raise FooException('Exception Message')
178
179Please don't raise string exceptions, as they're deprecated and will be removed
180from future versions of python. If you're in doubt about what type of exception
181you will raise, please look at http://docs.python.org/lib/module-exceptions.html
182and client/common_lib/error.py, the former is a list of python built in
183exceptions and the later is a list of autotest/autoserv internal exceptions. Of
184course, if you really need to, you can extend the exception definitions on
185client/common_lib/error.py.
186
187
mbligh71d338a2007-10-08 05:05:50 +0000188Submitting patches
189
190Generate universal diffs. Email them to autotest@test.kernel.org.
191Most mailers now break lines and/or changes tabs to spaces. If you know how
mbligh52207362009-09-03 20:54:29 +0000192to avoid that - great, put your patches inline. If you're not sure, just
mbligh71d338a2007-10-08 05:05:50 +0000193attatch them, I don't care much. Please base them off the current version.
194
195Don't worry about submitting patches to a public list - everybody makes
196mistakes, especially me ... so get over it and don't worry about it.
197(though do give your changes a test first ;-))