|
|
@ -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. |
|
|
|
|
|
|
|
|
|
|
|
Do not submit patches solely to modify the style of existing code. |
|
|
|
|
|
|
|
|
|
|
|
- Basic rules specified in [src/.clang-format](/src/.clang-format). |
|
|
|
- **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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|