diff options
| author | SteveAmor <SteveAmor@users.noreply.github.com> | 2022-01-02 22:27:43 +0000 |
|---|---|---|
| committer | SteveAmor <SteveAmor@users.noreply.github.com> | 2022-01-02 22:27:43 +0000 |
| commit | cc259b6a4ac93d507fa372a41ea653dedeb791ea (patch) | |
| tree | 3c8b8b937b2b91149003195679ce5acda1154c4d /doc/coding-convention.md | |
| parent | 94561b233136334c7507925b04a345adb0e6c769 (diff) | |
| parent | e0013e730448f4dc142e3610f970f22c807ac41e (diff) | |
resolves conflicts
Diffstat (limited to 'doc/coding-convention.md')
| -rw-r--r-- | doc/coding-convention.md | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/doc/coding-convention.md b/doc/coding-convention.md new file mode 100644 index 00000000..7198fa4f --- /dev/null +++ b/doc/coding-convention.md @@ -0,0 +1,41 @@ +# Coding convention + +## Language + +The language of this project is **C++**, and all new code must be written in C++. (Modern) C++ provides a lot of useful tools and functionalities that are beneficial for embedded software development like `constexpr`, `template` and anything that provides zero-cost abstraction. + +C code is accepted if it comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. + +## Coding style + +The most important rule to follow is to try to keep the code as easy to read and maintain as possible. + +Using an autoformatter is highly recommended, but make sure it's configured properly. + +There are preconfigured autoformatter rules for: + + * CLion (IntelliJ) in [.idea/codeStyles/Project.xml](/.idea/codeStyles/Project.xml) + * `clang-format` + +Also use `clang-tidy` to check the code for other issues. + +If there are no preconfigured rules for your IDE, you can use one of the existing ones to configure your IDE. + + - **Indentation** : 2 spaces, no tabulation + - **Opening brace** at the end of the line + - **Naming** : Choose self-describing variable name + - **class** : PascalCase + - **namespace** : PascalCase + - **variable** : camelCase, **no** prefix/suffix ('_', 'm_',...) for class members + - **Include guard** : `#pragma once` (no `#ifdef __MODULE__ / #define __MODULE__ / #endif`) + - **Includes** : + - files from the project : `#include "relative/path/to/the/file.h"` + - external files and std : `#include <file.h>` + - use includes relative to included directories like `src`, not relative to the current file. Don't do: `#include "../file.h"` + - Only use [primary spellings for operators and tokens](https://en.cppreference.com/w/cpp/language/operator_alternative) + - Use auto sparingly. Don't use auto for [fundamental/built-in types](https://en.cppreference.com/w/cpp/language/types) and [fixed width integer types](https://en.cppreference.com/w/cpp/types/integer), except when initializing with a cast to avoid duplicating the type name. + - Examples: + - `auto* app = static_cast<DisplayApp*>(instance);` + - `auto number = static_cast<uint8_t>(variable);` + - `uint8_t returnValue = MyFunction();` + - Use nullptr instead of NULL |
