Merge #10461: Update style guide

47d8441 Update style guide (Pieter Wuille)

Tree-SHA512: 0b11365f294eeda1ea5c45cf04b3f38435602f61edc0c605e067ed9d17d17c28e9f1dd76bd4fa8a630e9cec8c5103cd2bfe5f6097196761d576913d9180f2ecf
This commit is contained in:
Wladimir J. van der Laan 2017-05-31 16:59:33 +02:00
commit 55b72f3880
No known key found for this signature in database
GPG key ID: 1E4AED62986CD25D

View file

@ -3,41 +3,64 @@ Developer Notes
Various coding styles have been used during the history of the codebase, Various coding styles have been used during the history of the codebase,
and the result is not very consistent. However, we're now trying to converge to and the result is not very consistent. However, we're now trying to converge to
a single style, so please use it in new code. Old code will be converted a single style, which is specified below. When writing patches, favor the new
gradually and you are encouraged to use the provided style over attempting to mimick the surrounding style, except for move-only
[clang-format-diff script](/contrib/devtools/README.md#clang-format-diffpy) commits.
to clean up the patch automatically before submitting a pull request.
- Basic rules specified in [src/.clang-format](/src/.clang-format). Do not submit patches solely to modify the style of existing code.
- **Indentation and whitespace rules** as specified in
[src/.clang-format](/src/.clang-format). You can use the provided
[clang-format-diff script](/contrib/devtools/README.md#clang-format-diffpy)
tool to clean up patches automatically before submission.
- Braces on new lines for namespaces, classes, functions, methods. - Braces on new lines for namespaces, classes, functions, methods.
- Braces on the same line for everything else. - Braces on the same line for everything else.
- 4 space indentation (no tabs) for every block except namespaces. - 4 space indentation (no tabs) for every block except namespaces.
- No indentation for `public`/`protected`/`private` or for `namespace`. - No indentation for `public`/`protected`/`private` or for `namespace`.
- No extra spaces inside parenthesis; don't do ( this ) - No extra spaces inside parenthesis; don't do ( this )
- No space after function names; one space after `if`, `for` and `while`. - No space after function names; one space after `if`, `for` and `while`.
- If an `if` only has a single-statement then-clause, it can appear - If an `if` only has a single-statement `then`-clause, it can appear
on the same line as the if, without braces. In every other case, on the same line as the `if`, without braces. In every other case,
braces are required, and the then and else clauses must appear braces are required, and the `then` and `else` clauses must appear
correctly indented on a new line. correctly indented on a new line.
- **Symbol naming conventions**. These are preferred in new code, but are not
required when doing so would need changes to significant pieces of existing
code.
- Variable and namespace names are all lowercase, and may use `_` to
separate words.
- Class member variables have a `m_` prefix.
- Global variables have a `g_` prefix.
- Constant names are all uppercase, and use `_` to separate words.
- Class names, function names and method names are CamelCase. Do not prefix
class names with `C`.
- **Miscellaneous**
- `++i` is preferred over `i++`. - `++i` is preferred over `i++`.
Block style example: Block style example:
```c++ ```c++
int g_count = 0;
namespace foo namespace foo
{ {
class Class class Class
{ {
std::string m_name;
public:
bool Function(const std::string& s, int n) bool Function(const std::string& s, int n)
{ {
// Comment summarising what this section of code does // Comment summarising what this section of code does
for (int i = 0; i < n; ++i) { for (int i = 0; i < n; ++i) {
int total_sum = 0;
// When something fails, return early // When something fails, return early
if (!Something()) return false; if (!Something()) return false;
... ...
if (SomethingElse()) { if (SomethingElse(i)) {
DoMore(); total_sum += ComputeSomething(g_count);
} else { } else {
DoLess(); DoSomething(m_name, total_sum);
} }
} }