[PATCH] Add Documentation/CodingStyle

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Johannes Schindelin
Date: Tuesday, November 6, 2007 - 4:17 pm

Even if our code is quite a good documentation for our coding style,
some people seem to prefer a document describing it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

	I long resisted in adding this, as I really believe our code
	base is a very clean one, and a good description of what we
	prefer.

	But it seems that not everybody has the time to study our
	code in depth, beautiful as it is ;-)

	BTW the first to catch the allusion to a certain movie 
	wins a drink with me.

 Documentation/CodingStyle |   87 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 87 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/CodingStyle

diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
new file mode 100644
index 0000000..622b80b
--- /dev/null
+++ b/Documentation/CodingStyle
@@ -0,0 +1,87 @@
+As a popular project, we also have some guidelines to keep to the
+code.  For git in general, two rough rules are:
+
+ - Most importantly, we never say "It's in POSIX; we'll happily
+   screw your system that does not conform."  We live in the
+   real world.
+
+ - However, we often say "Let's stay away from that construct,
+   it's not even in POSIX".
+
+As for more concrete guidelines, just imitate the existing code
+(this is a good guideline, no matter which project you are contributing
+to...).  But if you must have some list of rules, here they are.
+
+For shell scripts specifically (not exhaustive):
+
+ - We prefer $( ... ) for command substitution; unlike ``, it
+   properly nests.  It should have been the way Bourne spelled
+   it from day one, but unfortunately isn't.
+
+ - We use ${parameter-word} and its [-=?+] siblings, and their
+   colon'ed "unset or null" form.
+
+ - We use ${parameter#word} and its [#%] siblings, and their
+   doubled "longest matching" form.
+
+ - We use Arithmetic Expansion $(( ... )).
+
+ - No "Substring Expansion" ${parameter:offset:length}.
+
+ - No shell arrays.
+
+ - No strlen ${#parameter}.
+
+ - No regexp ${parameter/pattern/string}.
+
+ - We do not use Process Substitution <(list) or >(list).
+
+ - We prefer "test" over "[ ... ]".
+
+ - We do not write noiseword "function" in front of shell
+   functions.
+
+For C programs:
+
+ - Use tabs to increment, and interpret tabs as taking up to 8 spaces
+
+ - Try to keep to 80 characters per line
+
+ - When declaring pointers, the star sides with the variable name, i.e.
+   "char *string", not "char* string" or "char * string".  This makes
+   it easier to understand "char *string, c;"
+
+ - Do not use curly brackets unnecessarily.  I.e.
+
+	if (bla) {
+		x = 1;
+	}
+
+   is frowned upon.  A gray area is when the statement extends over a
+   few lines, and/or you have a lengthy comment atop of it.
+
+ - Try to make your code understandable.  You may put comments in, but
+   comments invariably tend to stale out when the code they were
+   describing changes.  Often splitting a function into two makes the
+   intention of the code much clearer.
+
+   Double negation is often harder to understand than no negation at
+   all.
+
+   Some clever tricks, like using the !! operator with arithmetic
+   constructs, can be extremely confusing to others.  Avoid them,
+   unless there is a compelling reason to use them.
+
+ - Use the API.  No, really.  We have a strbuf (variable length string),
+   several arrays with the ALLOC_GROW() macro, a path_list for sorted
+   string lists, a hash map (mapping struct objects) named
+   "struct decorate", amongst other things.
+
+ - #include system headers in git-compat-util.h.  Some headers on some
+   systems show subtle breakages when you change the order, so it is
+   best to keep them in one place.
+
+ - if you are planning a new command, consider writing it in shell or
+   perl first, so that changes in semantics can be easily changed and
+   discussed.  Many git commands started out like that, and a few are
+   still scripts.
-- 
1.5.3.5.1597.g7191


-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/5] some shell portability fixes, Ralf Wildenhues, (Tue Nov 6, 1:15 pm)
[PATCH 2/5] Fix sed script to work with AIX sed., Ralf Wildenhues, (Tue Nov 6, 1:17 pm)
Re: [PATCH 3/5] Replace $((...)) with expr invocations., Ralf Wildenhues, (Tue Nov 6, 1:18 pm)
[PATCH 4/5] Fix sed string regex escaping in module_name., Ralf Wildenhues, (Tue Nov 6, 1:20 pm)
Re: [PATCH 3/5] Replace $((...)) with expr invocations., Ralf Wildenhues, (Tue Nov 6, 1:26 pm)
Re: [PATCH 0/5] some shell portability fixes, Junio C Hamano, (Tue Nov 6, 1:46 pm)
Re: [PATCH 0/5] some shell portability fixes, Mike Hommey, (Tue Nov 6, 2:02 pm)
Re: [PATCH 3/5] Replace $((...)) with expr invocations., Junio C Hamano, (Tue Nov 6, 2:06 pm)
Re: [PATCH 0/5] some shell portability fixes, Ralf Wildenhues, (Tue Nov 6, 2:09 pm)
[PATCH] Add Documentation/CodingStyle, Johannes Schindelin, (Tue Nov 6, 4:17 pm)
Re: [PATCH 0/5] some shell portability fixes, Johannes Schindelin, (Tue Nov 6, 4:25 pm)
Re: [PATCH] Add Documentation/CodingStyle, Andreas Ericsson, (Tue Nov 6, 5:04 pm)
Re: [PATCH] Add Documentation/CodingStyle, Junio C Hamano, (Tue Nov 6, 5:40 pm)
Re: [PATCH] Add Documentation/CodingStyle, Wincent Colaiuta, (Wed Nov 7, 12:53 am)
Re: [PATCH] Add Documentation/CodingStyle, Andreas Ericsson, (Wed Nov 7, 1:52 am)
Re: [PATCH] Add Documentation/CodingStyle, Andreas Ericsson, (Wed Nov 7, 1:53 am)
Re: [PATCH 0/5] some shell portability fixes, Mike Ralphson, (Wed Nov 7, 7:17 am)
Re: [PATCH 0/5] some shell portability fixes, Johannes Schindelin, (Wed Nov 7, 7:47 am)
Re: [PATCH] Add Documentation/CodingStyle, Johannes Schindelin, (Wed Nov 7, 7:54 am)
[PATCH v2] Add Documentation/CodingStyle, Johannes Schindelin, (Wed Nov 7, 7:59 am)
Re: [PATCH 0/5] some shell portability fixes, Mike Ralphson, (Wed Nov 7, 8:30 am)
Re: [PATCH 0/5] some shell portability fixes, Johannes Schindelin, (Wed Nov 7, 8:37 am)
Re: [PATCH 0/5] some shell portability fixes, Nguyen Thai Ngoc Duy, (Wed Nov 7, 8:58 am)
Re: [PATCH 0/5] some shell portability fixes, Nguyen Thai Ngoc Duy, (Wed Nov 7, 9:05 am)
Re: [PATCH] Add Documentation/CodingStyle, Jon Loeliger, (Wed Nov 7, 12:40 pm)
Re: [PATCH] Add Documentation/CodingStyle, Johannes Schindelin, (Wed Nov 7, 1:13 pm)
Re: [PATCH v2] Add Documentation/CodingStyle, Robin Rosenberg, (Wed Nov 7, 2:43 pm)
[PATCH v3] Add Documentation/CodingGuidelines, Johannes Schindelin, (Wed Nov 7, 3:35 pm)
Re: [PATCH v3] Add Documentation/CodingGuidelines, Junio C Hamano, (Wed Nov 7, 4:14 pm)
[PATCH v4] Add Documentation/CodingGuidelines, Johannes Schindelin, (Wed Nov 7, 5:33 pm)
Re: [PATCH v4] Add Documentation/CodingGuidelines, Junio C Hamano, (Wed Nov 7, 5:38 pm)
Re: [PATCH] Add Documentation/CodingStyle, Mike Ralphson, (Thu Nov 8, 4:29 am)
Re: [PATCH 0/5] some shell portability fixes, Miles Bader, (Sat Nov 10, 3:30 pm)