Project

General

Profile

Coding Standards » History » Version 18

Tom Clegg, 06/22/2017 06:35 PM

1 1 Tom Clegg
h1. Coding Standards
2
3 3 Tom Clegg
The rules are always up for debate. However, when debate is needed, it should happen outside the source tree. In other words, if the rules are wrong, first debate the rules in IRC etc., then fix the rules, then follow the new rules.
4 1 Tom Clegg
5 2 Tom Clegg
{{toc}}
6 1 Tom Clegg
7 2 Tom Clegg
h2. Git commits
8
9 1 Tom Clegg
Make sure your name and email address are correct.
10
11
* Use @git config --global user.email foo@example.com@ et al.
12
* It's a little unfortunate to have commits with author @foo@myworkstation.local@ but not bad enough to rewrite history, so fix this before you push!
13
14 9 Tom Clegg
Refer to a story number in each commit comment.
15
16
* @1234: Remove useless button.@
17
18
*When merging/committing to master,* refer to the story number in a way Redmine will notice. Redmine will list these commits/merges on the story page itself.
19
20
* @closes #1234@, or
21
* @refs #1234@
22
23 1 Tom Clegg
Use descriptive commit comments.
24
25
* Describe the delta between the old and new tree. If possible, describe the delta in *behavior* rather than the source code itself.
26 9 Tom Clegg
* Good: "1234: Support use of spaces in filenames."
27
* Good: "1234: Fix crash when user_id is nil."
28 1 Tom Clegg
* Less good: "Add some controller methods." (What do they do?)
29
* Less good: "More progress on UI branch." (What is different?)
30
* Less good: "Incorporate Tom's suggestions." (Who cares whose suggestions -- what changed?)
31
32
If further background or explanation is needed, separate it from the summary with a blank line.
33
34
* Example: "Users found it confusing that the boxes had different colors even though they represented the same kinds of things."
35
36 18 Tom Clegg
*Every commit* (even merge commits) must have a DCO sign-off. See [[Developer Certificate Of Origin]].
37 16 Tom Clegg
38
* Example: <code>Arvados-DCO-1.1-Signed-off-by: Joe Smith <joe.smith@example.com></code>
39
40 13 Tom Clegg
h2. Source code formatting
41 1 Tom Clegg
42 13 Tom Clegg
(Unless otherwise specified by style guide...)
43
44 10 Tom Clegg
No TAB characters in source files. "Except go programs.":https://golang.org/cmd/gofmt/
45 1 Tom Clegg
46 6 Tom Clegg
* Emacs: add to @~/.emacs@ &rarr; @(setq-default indent-tabs-mode nil)@
47
* Vim: add to @~/.vimrc@ &rarr; @:set expandtab@
48 8 Tom Clegg
* See [[Coding Standards#Git setup|Git setup]] below
49 4 Ward Vandewege
50 6 Tom Clegg
No inline comments: @this = !desired; # we don't want to do it.@
51 4 Ward Vandewege
52 6 Tom Clegg
No long (>80 column) lines, except in rare cases when the alternative is really clunky.
53
54 4 Ward Vandewege
No whitespace at the end of lines. Make git-diff show you:
55 5 Ward Vandewege
56
  git config color.diff.whitespace "red reverse"
57 6 Tom Clegg
git diff --check
58 1 Tom Clegg
59 13 Tom Clegg
h2. What to include
60
61 1 Tom Clegg
No commented-out blocks of code that have been replaced or obsoleted.
62
63
* It is in the git history if we want it back.
64
* If its absence would confuse someone reading the new code (despite never having read the old code), explain its absence in an English comment. If the old code is really still needed to support the English explanation, then go ahead -- now we know why it's there.
65
66
No commented-out debug statements.
67
68
* If the debug statements are likely to be needed in the future, use a logging facility that can be enabled at run time. @logger.debug "foo"@
69
70 13 Tom Clegg
h2. Style mismatch
71
72 1 Tom Clegg
Adopt indentation style of surrounding lines or (when starting a new file) the nearest existing source code in this tree/language.
73
74
If you fix up existing indentation/formatting, do that in a separate commit.
75
* If you bundle formatting changes with functional changes, it makes functional changes hard to find in the diff.
76
77 13 Tom Clegg
h2. Go
78
79
gofmt, golint, etc., and https://github.com/golang/go/wiki/CodeReviewComments
80
81
h2. Ruby
82
83
https://github.com/bbatsov/ruby-style-guide
84
85 1 Tom Clegg
h2. Python
86 13 Tom Clegg
87
PEP-8.
88 12 Tom Clegg
89
Tell Emacs you don't want a blank line at the end of a multiline docstring.
90
91
    (setq python-fill-docstring-style 'pep-257-nn)
92
93 11 Brett Smith
h2. JavaScript
94
95 15 Tom Morris
"Always use 3 equals unless you have a good reason to use 2.":https://github.com/airbnb/javascript#comparison--eqeqeq
96 14 Tom Morris
"Use 2 spaces for indents":https://github.com/airbnb/javascript#whitespace--spaces
97
98
Follow the Airbnb Javascript coding style guide unless otherwise stated (the rules above are for emphasis, not exceptions)
99
https://github.com/airbnb/javascript
100
101 7 Tom Clegg
h2. Git setup
102 6 Tom Clegg
103 7 Tom Clegg
Configure git to prevent you from committing whitespace errors.
104 1 Tom Clegg
105 6 Tom Clegg
<pre>
106 7 Tom Clegg
git config --global core.whitespace tab-in-indent,trailing-space
107 1 Tom Clegg
git config --global apply.whitespace error
108 17 Tom Clegg
</pre>
109
110
Add a DCO sign-off to the default commit message.
111
112
<pre>
113
cd .../arvados
114
printf '\n\nArvados-DCO-1.1-Signed-off-by: %s <%s>\n' "$(git config user.name)" "$(git config user.email)" >~/.arvados-dco.txt
115
git config commit.template ~/.arvados-dco.txt
116
</pre>
117
118
Add a DCO sign-off and "refs #xxxx" comment (referencing the issue# in the name of the branch being merged) to the default merge commit message.
119
120
<pre>
121
cd .../arvados
122
cat >.git/hooks/prepare-commit-message <<'EOF'
123
#!/bin/sh
124
125
case "$2,$3" in
126
    merge,)
127
        br=$(head -n1 ${1})
128
        n=$(echo "${br}" | egrep -o '[0-9]+')
129
        exec >${1}
130
        echo "${br}"
131
        echo
132
        echo "refs #${n}"
133
        echo
134
        echo "Arvados-DCO-1.1-Signed-off-by: ${GIT_AUTHOR_NAME} <${GIT_AUTHOR_EMAIL}>"
135
        ;;
136
    *)
137
        ;;
138
esac
139
EOF
140
chmod +x .git/hooks/prepare-commit-message
141 6 Tom Clegg
</pre>