blob: 7c655fe2a492e59a69af6725b0240c3743642e48 [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
16When writing python code, unless otherwise stated, stick to the python style
17guide (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
34Use descriptive variable names where possible - it helps to make the code
35self 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
mblighd876f452008-12-03 15:09:17 +000041
mbligh7654c822008-04-04 15:12:48 +000042Importing modules
43
44The order of imports should be as follows:
45
46Standard python modules
47Non-standard python modules
48Autotest modules
49
50Within one of these three sections, all module imports using the from
51keyword should appear after regular imports.
52Modules should be lumped together on the same line.
53Wildcard imports (from x import *) should be avoided if possible.
54Classes should not be imported from modules, but modules may be imported
55 from packages, i.e.:
56from common_lib import error
57and not
58from common_lib.error import AutoservError
59
60For example:
61import os, pickle, random, re, select, shutil, signal, StringIO, subprocess
62import sys, time, urllib, urlparse
63import MySQLdb
64from common_lib import error
65
mblighd876f452008-12-03 15:09:17 +000066Testing None
67
68Use "is None" rather than "== None" and "is not None" rather than "!= None".
69This way you'll never run into a case where someone's __eq__ or __ne__
70method do the wrong thing
71
mbligh71d338a2007-10-08 05:05:50 +000072
73Comments
74
75Generally, you want your comments to tell WHAT your code does, not HOW.
76We can figure out how from the code itself (or if not, your code needs fixing).
77
78Try to describle the intent of a function and what it does in a triple-quoted
79(multiline) string just after the def line. We've tried to do that in most
80places, though undoubtedly we're not perfect. A high level overview is
81incredibly helpful in understanding code.
82
83
84Simple code
85
86Keep it simple; this is not the right place to show how smart you are. We
87have plenty of system failures to deal with without having to spend ages
88figuring out your code, thanks ;-) Readbility, readability, readability.
89I really don't care if other things are more compact.
90
91"Debugging is twice as hard as writing the code in the first place. Therefore,
92if you write the code as cleverly as possible, you are, by definition, not
93smart enough to debug it." Brian Kernighan
94
95
96Function length
97
98Please keep functions short, under 30 lines or so if possible. Even though
99you are amazingly clever, and can cope with it, the rest of us are all stupid,
100so be nice and help us out. To quote the Linux Kernel coding style:
101
102Functions should be short and sweet, and do just one thing. They should
103fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
104as we all know), and do one thing and do that well.
105
106
mbligh900b6c12008-01-14 16:56:47 +0000107Exceptions
108
109When raising exceptions, the preferred syntax for it is:
110
111raise FooException('Exception Message')
112
113Please don't raise string exceptions, as they're deprecated and will be removed
114from future versions of python. If you're in doubt about what type of exception
115you will raise, please look at http://docs.python.org/lib/module-exceptions.html
116and client/common_lib/error.py, the former is a list of python built in
117exceptions and the later is a list of autotest/autoserv internal exceptions. Of
118course, if you really need to, you can extend the exception definitions on
119client/common_lib/error.py.
120
121
mbligh71d338a2007-10-08 05:05:50 +0000122Submitting patches
123
124Generate universal diffs. Email them to autotest@test.kernel.org.
125Most mailers now break lines and/or changes tabs to spaces. If you know how
126to avoid that - great, put your patches inline. If you're not sure, just
127attatch them, I don't care much. Please base them off the current version.
128
129Don't worry about submitting patches to a public list - everybody makes
130mistakes, especially me ... so get over it and don't worry about it.
131(though do give your changes a test first ;-))