From 57da2827164792ec291d3da5672a649c47ce567d Mon Sep 17 00:00:00 2001 From: tulpenkiste Date: Sun, 28 May 2023 19:12:07 +0100 Subject: [PATCH] Introduce CODINGSTYLE.md (complain to me on discord if it sucks) --- CODINGSTYLE.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 CODINGSTYLE.md diff --git a/CODINGSTYLE.md b/CODINGSTYLE.md new file mode 100644 index 0000000..491a256 --- /dev/null +++ b/CODINGSTYLE.md @@ -0,0 +1,54 @@ +# Hibis Coding Standards +## CXX Language +Use C++17 as the C++ standard. Hibis should compile under all major compilers. +## Structure +Each module of the game engine should be kept within their specific folders. E.g.: +- Core +- Renderer/(renderer name) +If statically linking third party libraries are *absolutely* required, they must be placed in a folder called `external` in the repository root. +## Formatting +Files need to end with a new line.
+Indenting should be done using hard tabs (the tab character) rather than spaces.
+New lines should be after `{` with the exception of class/struct construction which has no newlines at all.
+There should be one class per file. +## Includes +`#include` uses must go in the following order (with each section seperated by an extra newline): +```cpp +#include + +// From Hibis +#include + +// Use header in current dir +#include "relative-header" +``` +`..` should be avoided within "relative" headers in the event it causes issues for packagers.
+Include guards should be handled via `#pragma once`. +## Variables +Variables should be camelCase and be named to make it obvious what their purpose is.
+Variables should be prefixed with specific chars depending on where the variable is. +- Member Variable - Prefix with `m` +- Global Variable - Prefix with `g` +- Static Variable - Prefix with `s` +Example: +```c++ +const int gAmountOfTimesISuccessfullyWriteGoodVariableNames = 0; + +class ExampleClass final { +public: + ExampleClass() {} + ~ExampleClass() {} + + // dont ask + void hmmmTimeToScream() { + std::cout << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa" << std::endl; + } +private: + std::string mMyName = "Example Class"; +} +``` +## Classes +If a class is not going to be used/intended to be used for polymorphism, mark it as a `final` class.
+Base classes should make all functions `virtual` to allow for functions to be overriden.
+Simple set/get functions should be inside of the header file on a single line.
+Class names should be in PascalCase and be obvious what their purpose is.