diff --git a/doc/contrib/code.rst b/doc/contrib/code.rst index 0bced16c24..137caafb7d 100644 --- a/doc/contrib/code.rst +++ b/doc/contrib/code.rst @@ -25,8 +25,8 @@ run the following commands to apply it: # Install the formatter if not present pip install black - # Automatically apply style to a certain file. If unsure what this does read on. - black . scripts/arbor/build-catalogue.in + # Automatically apply style to all Python files. If unsure what this does read on. + black . The formatter can also be run with ``--check`` to list offending files and ``--diff`` to preview changes. Most editors can `integrate with black @@ -35,19 +35,19 @@ The formatter can also be run with ``--check`` to list offending files and C++ --- -The main development language of Arbor is C++. For Arbor we start with +The main development language of Arbor is C++. For Arbor, we start with the community guidelines set out in the `C++ Core Guidelines `__. These -guidelines are quite generic, and only give loose guidelines for some +guidelines are quite generic and only give loose guidelines for some important topics like variable naming and indentation. This wiki will describe the specific extensions and differences to the C++ Core Guidelines - variable naming. - code formatting (indentation, placement of curly braces, ``int const&`` vs ``const int&`` etc.) - -rules for topics not covered in the Core Guidelines (e.g. CUDA). - +rules for topics not covered in the Core Guidelines (e.g., CUDA). - exceptions to the rules given in the Core Guidelines. - rules for the CMake build system and directory structure. - rules for external -dependencies (e.g. Boost). +dependencies (e.g., Boost). .. TODO:: This page needs revision. @@ -88,9 +88,9 @@ namespaces are declared and formatted in Arbor: } // namespace util } // namespace arb -In the example above the namespaces are not indented. However, +In the example above, the namespaces are not indented. However, namespaces should be indented if they are declared in the middle of -code, to make their existance obvious to the person reading the code. +code to make their existence obvious to the person reading the code. Use an ``impl`` namespace to hide implementation details that should not be exposed to user space. @@ -103,9 +103,9 @@ Formatting statements --------------------- A lot of the rules here are purely a matter of personal taste, imposed -by the guy who got to set the rules. That said, it follows accepted +by the guy who got to set the rules. That said, it follows the accepted practice in the C++ community (if we accept that not everybody has the -same accepted practice), and if followed consistently will make code +same accepted practice), and if followed consistently, will make code easier to understand. .. code:: c++ @@ -146,8 +146,8 @@ easier to understand. } TODO: When declaring an operator, should we leave a space between the -operator and the following opening parenthesis or should we follow the -convention we use for functions, where we don’t leave a space? +operator and the following opening parenthesis, or should we follow the +convention we use for functions where we don’t leave a space? Indentation and whitespace cleanup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -194,7 +194,7 @@ would be nice if we could decide on the most common ones. - … Ben says “depends… I would use ``count`` or ``index`` unless the scope -of the variable is very small. Using ``it`` is standard C++ short hand, +of the variable is very small. Using ``it`` is standard C++ shorthand, but again for fairly limited scope.” Member variables @@ -254,7 +254,7 @@ Getters and Setters ~~~~~~~~~~~~~~~~~~~ Before filling up a class with getters and setters, consider seriously -if those members are meant actually to be public. If nonetheless getters +if those members are meant actually to be public. If, nonetheless, getters and/or setters are needed, don’t use the ``get_`` and ``set_`` prefixes. .. code:: c++ @@ -310,7 +310,7 @@ written in capitals, with words separated by underscores. Always use ``{}``, even for single statement ``if``, ``for``, etc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It makes code clearer, and avoids nasty bugs that occur when +It makes code clearer and avoids nasty bugs that occur when refactoring. It also avoids some errors when merging with git. :: @@ -412,7 +412,7 @@ use ``unique_ptr`` Actually, feel free to use naked pointers in your code, but make sure that you use smart pointers to handle allocation and freeing of memory. -When a developer sees a naked pointer in Arbor they can think “good, I +When a developer sees a naked pointer in Arbor, they can think, “good, I don’t have to worry about responsibility for freeing that memory”. Furthermore, if ``unique_ptr`` handles allocation and freeing of memory, the user doesn’t have to concern themselves with freeing memory ever. @@ -425,8 +425,8 @@ while avoiding ``shared_ptr`` whenever possible ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you think long and hard, you will probably realise that you actually -want a ``unique_ptr``. Shared pointers have performance overheads, and -are quite easy to misuse. For example by creating circular references +want a ``unique_ptr``. Shared pointers have performance overheads and +are quite easy to misuse. For example, by creating circular references that ironically lead to memory never being freed. Header files @@ -446,8 +446,8 @@ don’t rely on headers being included elsewhere For example, if you use ``std::vector`` in a file, make sure to have ``#include `` at the top of the source file. -Relying on headers being include elsewhere can lead to portability -problems, for example on OS X you have to ``#include `` for some +Relying on headers being included elsewhere can lead to portability +problems, for example, on MacOS you have to ``#include `` for some math functions that are imported via other header files with gcc on Linux. @@ -491,7 +491,7 @@ group headers together In the following order 1. C++ standard libary -2. system C headers (POSIX, kernel interfaces etc.) +2. system C headers (POSIX, kernel interfaces, etc.) 3. external libraries 4. public arbor headers 5. private arbor headers