documentation/codestyle.md

1.9 KiB

Code Style

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. Also commit messages have to fit the described format.

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):

bool likes_pigs (void* a) {
    if (a != NULL) {
        if (a == 0xACAB) {
            return false;
        }
    }
    return true;
}

->

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:

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