This is style guide for RAPP-API contributors.
You should use it for any new code that you would add to this project and try to format existing code to use this style.
-
RAPP-API uses the Allman/BSD style of indentation.
-
Indent with spaces, not tabs.
-
Use 4 spaces per indent (unless needed like
Makefile). -
Opening curly bracket is on the following line for struct and classes, as well as methods:
// ✔: struct name { // code }; // ✗: void func() { // code } // ✔: void func() { // code } -
For code statements, please use a curly bracket after the statement, and not in a new line:
// ✗: if (...) { // code } // ✔: if (...) { // code } -
Put a single space after
if,whileandforbefore conditions.// ✔: if () {} // ✗: if() {} -
Put spaces before and after operators excluding increment and decrement;
// ✔: int a = 1 + 2 * 3; a++; // ✗: int a=1+2*3; a ++; -
Never put spaces between function name and parameters list.
// ✔: func(args); // ✗: func (args); -
Never put spaces after
(and before). -
Always put space after comma and semicolon.
// ✔: func(arg1, arg2); for (int i = 0; i < LENGTH; i++) {} // ✗: func(arg1,arg2); for (int i = 0;i<LENGTH;i++) {} -
Function Declaration parameters should be aligned into new lines
// ✔: func( param1, param2, param3 ); // ✗: func(param1, param2, param3); -
Template classes and struct definitions should use new lines:
// ✔: template <typename T> void foo<T>::bar() { } // ✗: template <typename T> void foo<T>::bar() { } -
Template parameters and template template parameters can use their own line:
// ✔: template <typename foo, typename bar> void foobar<foo,bar>::run() -
Calling Functions with multiple parameters that would extend the line in width, should be broken into new lines where and when possible:
// ✔: func(param1, param2, func2(param3, param4), param5); func(param1, func2(param2, param3, param4), param5); // ✗: func(param1, param2, func2(param3, param4), param5); -
Naming class members which are private should follow an underscore: The only excpetion to this rule is
structwhere the member is public.// ✔: class foo { private: int var_; }; // ✗: class foo { private: int var; };
Document your code using Doxygen.
-
Documentation comment should use double star notation or tripple slash:
// ✔: /// Some var int var; /** * Some func */ void func(); -
Use at
@as tag mark:// ✔: /** * @param a an integer argument. * @param s a constant character pointer. * @return The results */ int foo(int a, const char *s);
All names in code should be small_snake_case. No Hungarian notation is used.
Classes and structs names should not have capital letters.
Use namespaces (in C++) and class modules (in Node.JS).
-
Use the same name for both definition headers and implementation files. Do not break up the definition and implementation files into different locations.
foo/foo.hppfoo/foo.cpp -
For template code, either add it at the end of the header, or add it in a
*.tplfile, and include that file at the end of the header -
Use only internal headers (
.ihh) for including files. Do not include 3rd party headers in the declaration headers.foo/includes.ihh -
Only include what is absolutely necessary, minimising dependencies.
-
Do not polute the namespace or class definitions with various
#include/require, put all of them within your internal include header (includes.ihh/includes.js).