blob: 9df3294d1cedb975b26ce36ac2dd19dc2da2acea [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
Tan Gao8aac17b2013-04-16 08:46:01 -070027For hanging indentation, use 8 spaces plus all args should be on the new line.
28
29 # Either of the following hanging indentation is considered acceptable.
30YES: return 'class: %s, host: %s, args = %s' % (
31 self.__class__.__name__, self.hostname, self.args)
32
33YES: return 'class: %s, host: %s, args = %s' % (
34 self.__class__.__name__,
35 self.hostname,
36 self.args)
37
38 # Do not use 4 spaces for hanging indentation
39NO: return 'class: %s, host: %s, args = %s' % (
40 self.__class__.__name__, self.hostname, self.args)
41
42 # Do put all args on new line
43NO: return 'class: %s, host: %s, args = %s' % (self.__class__.__name__,
44 self.hostname, self.args)
45
mbligh71d338a2007-10-08 05:05:50 +000046Don't leave trailing whitespace, or put whitespace on blank lines.
Simran Basic7330bd2013-05-31 09:23:50 -070047
mbligh71d338a2007-10-08 05:05:50 +000048Leave TWO blank lines between functions - this is Python, there are no clear
49function end markers, and we need help.
50
51
52Variable names and UpPeR cAsE
53
mbligh52207362009-09-03 20:54:29 +000054Use descriptive variable names where possible - it helps to make the code
mbligh71d338a2007-10-08 05:05:50 +000055self documenting.
56
57Don't use CamelCaps style in most places - use underscores to separate parts
58of your variable_names please. I shall make a bedgrudging exception for class
59names I suppose, but I'll still whine about it a lot.
60
mblighd876f452008-12-03 15:09:17 +000061
mbligh7654c822008-04-04 15:12:48 +000062Importing modules
63
64The order of imports should be as follows:
65
66Standard python modules
67Non-standard python modules
68Autotest modules
69
70Within one of these three sections, all module imports using the from
71keyword should appear after regular imports.
Christopher Wileyd7445ef2014-12-05 13:26:05 -080072Each module should be imported on its own line.
mbligh7654c822008-04-04 15:12:48 +000073Wildcard imports (from x import *) should be avoided if possible.
74Classes should not be imported from modules, but modules may be imported
75 from packages, i.e.:
76from common_lib import error
77and not
78from common_lib.error import AutoservError
79
80For example:
Christopher Wileyd7445ef2014-12-05 13:26:05 -080081import os
82import pickle
83import random
84import re
85import select
86import shutil
87import signal
88import subprocess
89
mbligh8bcd23a2009-02-03 19:14:06 +000090import common # Magic autotest_lib module and sys.path setup code.
91import MySQLdb # After common so that we check our site-packages first.
Christopher Wileyd7445ef2014-12-05 13:26:05 -080092
mbligh7654c822008-04-04 15:12:48 +000093from common_lib import error
94
Christopher Wileyd7445ef2014-12-05 13:26:05 -080095
mblighd876f452008-12-03 15:09:17 +000096Testing None
97
98Use "is None" rather than "== None" and "is not None" rather than "!= None".
mbligh52207362009-09-03 20:54:29 +000099This way you'll never run into a case where someone's __eq__ or __ne__
mblighd876f452008-12-03 15:09:17 +0000100method do the wrong thing
101
mbligh71d338a2007-10-08 05:05:50 +0000102
103Comments
104
105Generally, you want your comments to tell WHAT your code does, not HOW.
106We can figure out how from the code itself (or if not, your code needs fixing).
107
108Try to describle the intent of a function and what it does in a triple-quoted
109(multiline) string just after the def line. We've tried to do that in most
mbligh52207362009-09-03 20:54:29 +0000110places, though undoubtedly we're not perfect. A high level overview is
mbligh71d338a2007-10-08 05:05:50 +0000111incredibly helpful in understanding code.
112
113
Simran Basic7330bd2013-05-31 09:23:50 -0700114Hardcoded String Formatting
115
116Strings should use only single quotes for hardcoded strings in the code. Double
117quotes are acceptable when single quote is used as part of the string.
118Multiline string should not use '\' but wrap the string using parenthesises.
119
120REALLY_LONG_STRING = ('This is supposed to be a really long string that is '
121 'over 80 characters and does not use a slash to '
122 'continue.')
123
mbligh5cad50f2009-06-08 16:50:51 +0000124Docstrings
125
126Docstrings are important to keep our code self documenting. While it's not
127necessary to overdo documentation, we ask you to be sensible and document any
128nontrivial function. When creating docstrings, please add a newline at the
showard25f056a2009-11-23 20:22:50 +0000129beginning of your triple quoted string and another newline at the end of it. If
130the docstring has multiple lines, please include a short summary line followed
131by a blank line before continuing with the rest of the description. Please
132capitalize and punctuate accordingly the sentences. If the description has
133multiple lines, put two levels of indentation before proceeding with text. An
134example docstring:
mbligh5cad50f2009-06-08 16:50:51 +0000135
136def foo(param1, param2):
mbligh52207362009-09-03 20:54:29 +0000137 """
showard25f056a2009-11-23 20:22:50 +0000138 Summary line.
139
mbligh52207362009-09-03 20:54:29 +0000140 Long description of method foo.
mbligh5cad50f2009-06-08 16:50:51 +0000141
mbligh52207362009-09-03 20:54:29 +0000142 @param param1: A thing called param1 that is used for a bunch of stuff
143 that has methods bar() and baz() which raise SpamError if
144 something goes awry.
Simran Basic7330bd2013-05-31 09:23:50 -0700145
146 @returns a list of integers describing changes in a source tree
147
148 @raises exception that could be raised if a certain condition occurs.
149
mbligh52207362009-09-03 20:54:29 +0000150 """
mbligh5cad50f2009-06-08 16:50:51 +0000151
152The tags that you can put inside your docstring are tags recognized by systems
153like doxygen. Not all places need all tags defined, so choose them wisely while
Simran Basic7330bd2013-05-31 09:23:50 -0700154writing code. Generally (if applicable) always list parameters, return value
155(if there is one), and exceptions that can be raised to each docstring.
mbligh5cad50f2009-06-08 16:50:51 +0000156
157@author - Code author
158@param - Parameter description
Simran Basic7330bd2013-05-31 09:23:50 -0700159@raise - If the function can throw an exception, this tag documents the
mbligh5cad50f2009-06-08 16:50:51 +0000160possible exception types.
Simran Basic7330bd2013-05-31 09:23:50 -0700161@raises - same as @raise.
162@return - Return value description
163@returns - Same as @return
164@see - Reference to what you have done
165@warning - Call attention to potential problems with the code
166@var - Documentation for a variable or enum value (either global or as a
167member of a class)
168@version - Version string
mbligh5cad50f2009-06-08 16:50:51 +0000169
mbligh3bdba922010-05-03 18:02:54 +0000170When in doubt refer to: http://doxygen.nl/commands.html
171
mbligh71d338a2007-10-08 05:05:50 +0000172Simple code
173
174Keep it simple; this is not the right place to show how smart you are. We
175have plenty of system failures to deal with without having to spend ages
176figuring out your code, thanks ;-) Readbility, readability, readability.
mbligh52207362009-09-03 20:54:29 +0000177I really don't care if other things are more compact.
mbligh71d338a2007-10-08 05:05:50 +0000178
179"Debugging is twice as hard as writing the code in the first place. Therefore,
mbligh52207362009-09-03 20:54:29 +0000180if you write the code as cleverly as possible, you are, by definition, not
mbligh71d338a2007-10-08 05:05:50 +0000181smart enough to debug it." Brian Kernighan
182
183
184Function length
185
186Please keep functions short, under 30 lines or so if possible. Even though
187you are amazingly clever, and can cope with it, the rest of us are all stupid,
188so be nice and help us out. To quote the Linux Kernel coding style:
189
190Functions should be short and sweet, and do just one thing. They should
191fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
192as we all know), and do one thing and do that well.
193
194
mbligh900b6c12008-01-14 16:56:47 +0000195Exceptions
196
197When raising exceptions, the preferred syntax for it is:
198
199raise FooException('Exception Message')
200
201Please don't raise string exceptions, as they're deprecated and will be removed
202from future versions of python. If you're in doubt about what type of exception
203you will raise, please look at http://docs.python.org/lib/module-exceptions.html
204and client/common_lib/error.py, the former is a list of python built in
205exceptions and the later is a list of autotest/autoserv internal exceptions. Of
206course, if you really need to, you can extend the exception definitions on
207client/common_lib/error.py.
208
209
mbligh71d338a2007-10-08 05:05:50 +0000210Submitting patches
211
212Generate universal diffs. Email them to autotest@test.kernel.org.
213Most mailers now break lines and/or changes tabs to spaces. If you know how
mbligh52207362009-09-03 20:54:29 +0000214to avoid that - great, put your patches inline. If you're not sure, just
mbligh71d338a2007-10-08 05:05:50 +0000215attatch them, I don't care much. Please base them off the current version.
216
217Don't worry about submitting patches to a public list - everybody makes
218mistakes, especially me ... so get over it and don't worry about it.
219(though do give your changes a test first ;-))