From c495db8a71675fac3f48f8421b3035b318c3dd82 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 21 Aug 2022 14:44:05 +0300 Subject: [PATCH] Simplify coding style (#1280) --- doc/coding-convention.md | 62 ++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 37 deletions(-) diff --git a/doc/coding-convention.md b/doc/coding-convention.md index 7198fa4f..9d218ba2 100644 --- a/doc/coding-convention.md +++ b/doc/coding-convention.md @@ -1,41 +1,29 @@ -# Coding convention +# Coding style -## Language +## Use these tools to find and fix issues. -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. +- Use `clang-format` to format the code. +- Use `clang-tidy` to check the code for other potential issues. -C code is accepted if it comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK. +## Follow these guidelines while writing code. -## 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 ` - - 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(instance);` - - `auto number = static_cast(variable);` - - `uint8_t returnValue = MyFunction();` - - Use nullptr instead of NULL +- **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 ` + - 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. + ```c++ + // Examples: + auto* app = static_cast(instance); + auto number = static_cast(variable); + uint8_t returnValue = MyFunction(); + ``` +- Use `nullptr` instead of `NULL`