Introduce CODINGSTYLE.md (complain to me on discord if it sucks)
This commit is contained in:
parent
374c825f9f
commit
57da282716
54
CODINGSTYLE.md
Normal file
54
CODINGSTYLE.md
Normal file
|
@ -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.<br>
|
||||||
|
Indenting should be done using hard tabs (the tab character) rather than spaces.<br>
|
||||||
|
New lines should be after `{` with the exception of class/struct construction which has no newlines at all.<br>
|
||||||
|
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 <system-header>
|
||||||
|
|
||||||
|
// From Hibis
|
||||||
|
#include <hibis-header>
|
||||||
|
|
||||||
|
// Use header in current dir
|
||||||
|
#include "relative-header"
|
||||||
|
```
|
||||||
|
`..` should be avoided within "relative" headers in the event it causes issues for packagers.<br>
|
||||||
|
Include guards should be handled via `#pragma once`.
|
||||||
|
## Variables
|
||||||
|
Variables should be camelCase and be named to make it obvious what their purpose is.<br>
|
||||||
|
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.<br>
|
||||||
|
Base classes should make all functions `virtual` to allow for functions to be overriden.<br>
|
||||||
|
Simple set/get functions should be inside of the header file on a single line.<br>
|
||||||
|
Class names should be in PascalCase and be obvious what their purpose is.
|
Loading…
Reference in a new issue