blob: b585c72a2462f55d8695df4ae9a99349ba22cdf9 [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
14Indentation & whitespace
15
16Format your code for an 80 character wide screen.
17
mblighc960fcf2008-06-18 19:58:57 +000018Indentation is now 4 spaces, as opposed to hard tabs (which it used to be).
19This is the Python standard.
mbligh71d338a2007-10-08 05:05:50 +000020
21Don't leave trailing whitespace, or put whitespace on blank lines.
22Leave TWO blank lines between functions - this is Python, there are no clear
23function end markers, and we need help.
24
25
26Variable names and UpPeR cAsE
27
28Use descriptive variable names where possible - it helps to make the code
29self documenting.
30
31Don't use CamelCaps style in most places - use underscores to separate parts
32of your variable_names please. I shall make a bedgrudging exception for class
33names I suppose, but I'll still whine about it a lot.
34
mbligh7654c822008-04-04 15:12:48 +000035Importing modules
36
37The order of imports should be as follows:
38
39Standard python modules
40Non-standard python modules
41Autotest modules
42
43Within one of these three sections, all module imports using the from
44keyword should appear after regular imports.
45Modules should be lumped together on the same line.
46Wildcard imports (from x import *) should be avoided if possible.
47Classes should not be imported from modules, but modules may be imported
48 from packages, i.e.:
49from common_lib import error
50and not
51from common_lib.error import AutoservError
52
53For example:
54import os, pickle, random, re, select, shutil, signal, StringIO, subprocess
55import sys, time, urllib, urlparse
56import MySQLdb
57from common_lib import error
58
mbligh71d338a2007-10-08 05:05:50 +000059
60Comments
61
62Generally, you want your comments to tell WHAT your code does, not HOW.
63We can figure out how from the code itself (or if not, your code needs fixing).
64
65Try to describle the intent of a function and what it does in a triple-quoted
66(multiline) string just after the def line. We've tried to do that in most
67places, though undoubtedly we're not perfect. A high level overview is
68incredibly helpful in understanding code.
69
70
71Simple code
72
73Keep it simple; this is not the right place to show how smart you are. We
74have plenty of system failures to deal with without having to spend ages
75figuring out your code, thanks ;-) Readbility, readability, readability.
76I really don't care if other things are more compact.
77
78"Debugging is twice as hard as writing the code in the first place. Therefore,
79if you write the code as cleverly as possible, you are, by definition, not
80smart enough to debug it." Brian Kernighan
81
82
83Function length
84
85Please keep functions short, under 30 lines or so if possible. Even though
86you are amazingly clever, and can cope with it, the rest of us are all stupid,
87so be nice and help us out. To quote the Linux Kernel coding style:
88
89Functions should be short and sweet, and do just one thing. They should
90fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
91as we all know), and do one thing and do that well.
92
93
mbligh900b6c12008-01-14 16:56:47 +000094Exceptions
95
96When raising exceptions, the preferred syntax for it is:
97
98raise FooException('Exception Message')
99
100Please don't raise string exceptions, as they're deprecated and will be removed
101from future versions of python. If you're in doubt about what type of exception
102you will raise, please look at http://docs.python.org/lib/module-exceptions.html
103and client/common_lib/error.py, the former is a list of python built in
104exceptions and the later is a list of autotest/autoserv internal exceptions. Of
105course, if you really need to, you can extend the exception definitions on
106client/common_lib/error.py.
107
108
mbligh71d338a2007-10-08 05:05:50 +0000109Submitting patches
110
111Generate universal diffs. Email them to autotest@test.kernel.org.
112Most mailers now break lines and/or changes tabs to spaces. If you know how
113to avoid that - great, put your patches inline. If you're not sure, just
114attatch them, I don't care much. Please base them off the current version.
115
116Don't worry about submitting patches to a public list - everybody makes
117mistakes, especially me ... so get over it and don't worry about it.
118(though do give your changes a test first ;-))