From 6b3834ef0b32f06037bd7cae96f682e4a5579c07 Mon Sep 17 00:00:00 2001 From: Ralf Ulrich <ralf.ulrich@kit.edu> Date: Wed, 25 Mar 2020 14:25:41 +0100 Subject: [PATCH] Update text. --- CONTRIBUTING.md | 61 ++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a153d630..2ce49f0cf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,37 +46,42 @@ e.g. [link1](https://clangformat.com/) or While `clang-format` does the structural formatting, we still need to agree on naming conventions: - - Classes and structs start with capital letters - - Class member variables start with "f" - - Any static variable has a "g" prefix. A static member variable starts with "fg" - - Class member functions start with capital letters - - Any class getter begins with "Get", and setter with "Set". Logical getters start with "Is" or "Has". - - enums should be "enum class" - - Function parameter names start with "v" - - types in template definitions start with "T" - - Normal variable names in code start non-capital. To avoid confusion with these special identifiers - described above in case an identifier starts with `v`, `T`, `f`, `fg`, or `g`, this prefix may not be - followed by a capital letter. i.e. `funkyVariable` is allowed while `vLooksLikeArgument` is not. + - Classes and structs start with capital letters ```LikeThis``` + - Class member variables start non-captial and have a trailing "_" ```likeThis_``` + - Class member functions start with small letters ```LikeThis::doSomething(...)``` + - Any class setter begins with "set_" ```LikeThis::set_something(...)``` + - Any class getter is named accoring to its property: ```LikeThis::something()``` + - Logical getters may start with ```is_``` or ```has_``` + - enums should be ```enum class``` + - Named variables start with small letter ```likeThis``` + - types in template definitions start with "T" ```TLikeThis``` + + - use names that explain and document the code, thus + ``` + ``` + and not + ``` + ``` + This actually is suffient to document the code, no futher comments should be added in such case. - We use namespaces to avoid clashes and to structure code - - *Everything* is part of the corsika namespace + - *Everything* is part of one of those namespaces: + - ```corsika::framework```, ```corsika::physics```, or ```corsika::process``` - All classes and objects are encapsulated into suited sub-namespaces, - thus corsika::geometry, corsika::processes, corsika::units, etc. + thus ```corsika::framework::geometry```, ```corsika::physics::process```, ```corsika::physics::units```, etc. - Namespace names do not use capital letters. - - Every header file is copied during build and install into - "include/corsika/[namespace]" which also means, each header file - can only provide definitions for a _single_ namespace. It is one - main purpose of namespaces to structure the location of header - files. - - Each header file must include a `#pragma once` immediately below - the copyright statement. - - Header files should always be included with `<..>`, thus, - `#include <corsika/geometry/Point.h>` since the build system - will always provide the correct include directives (and files - anyway cannot be found in file-system paths, which generally do - not follow the namespace naming conventions outlined - here). - + - Every header file is located in the source tree in ```include/corsika/[namespace]```, which also means that in almost all cases each header file + can only provide definitions for a _single_ namespace. It is one + main purpose of namespaces to structure the location of header + files. + - Each header file uses an include protection ```#pragma once``` + immediately below the copyright statement. + - Header files should always be included with `<..>`, thus, + `#include <corsika/geometry/Point.h>` since the build system + will always provide the correct include directives (and files + anyway cannot be found in file-system paths, which generally do + not follow the namespace naming conventions outlined + here). - Header files are named after the main class (or object) they define. This also means each header file name starts with a capital letter. @@ -89,7 +94,7 @@ While `clang-format` does the structural formatting, we still need to agree on n - We use C++17 concepts wherever useful and helpful - On any major error or malfunction we throw an exception. This is needed and required for complex physics and shower debugging. - We never catch exceptions for error handling, there might be very few special exceptions from this. We need to discuss such cases. - - Everything that should not change should be `const` + - Everything that should not change should be ```const``` - Everything that does not need to be visible to the outside of a class/struct should be `private` or `protected` - We prefer the use of references, wherever useful - There cannot be any pointer in the interface of any class or object -- GitLab