--- title: "Code Style" summary: "Read this, before contributing!" --- The following code style should be applied to the whole noxos codebase. Pull Requests that don't follow this code style will be rejected. # Naming conventions - **structs** are suffixed with **_T** - **typedefs** are suffixed with **_t** - **enums** are suffixed with **_E** - **global** variables are prefixed with **g_** Everything is **snake_case**. # Code readability To make the code as readable and self explaining as possible, there are a few patterns that should be used. ## Avoid abbreviations Give your variables, functions, etc. meaningfully names. The times of 80-char wide screens are over, feel free to use that space :D Example: `sym_at_idx` -> `get_symbol_at_index` But you're not forced to (anything) write out everything. For example the **Interrupt Descriptor Table** is simply referred to as **idt** (this abbreviation is btw standard). ## Avoid indentation nesting In a perfect codebase, the maximum indention level would be 3. The goal of NoxOS is not to be a perfect codebase, but please avoid huge indention nesting. To achieve this, you can break parts into extra functions and/or use the early return pattern. Example (definitely written 100% sober): ```c bool likes_pigs (void* a) { if (a != NULL) { if (a == 0xACAB) { return false; } } return true; } ``` -> ```c bool likes_pigs (void* a) { if (a == NULL) { return true; } if (a != 0xACAB) { return true; } return false; } ``` ## align declarations Please align declarations, definitions, etc like in the example: ```c char am_i_a_variable = '?'; uint64_t number = 0; bool i_waste_bits = true; ``` ## namespaces Unlike C++, C has no namespaces. To achieve the goal of namespaces, please prefix your functions, structs, etc. with the "namespace" they are in. Example: `out_byte` -> `io_out_byte`