diff --git a/CODING_STYLE b/CODING_STYLE.md similarity index 51% rename from CODING_STYLE rename to CODING_STYLE.md index 3378bd36..4fe97ed7 100644 --- a/CODING_STYLE +++ b/CODING_STYLE.md @@ -1,41 +1,49 @@ + - Indentation in tabs, 8 characters wide, spaces after the tabs where vertical alignment is required (see below) +**Note: this file uses spaces due to markdown rendering issues for tabs. + Code must be implemented using tabs.** + - Max line width 80ch, do not break up printed strings though - Break up long lines at logical groupings, one line for each logical group - int a = somelongname() + - someotherlongname(); +```c +int a = somelongname() + + someotherlongname(); - if (a < 0 && - (b > 20 & d < 10) && - d != 0.0) +if (a < 0 && + (b > 20 & d < 10) && + d != 0.0) - somelongfunctioncall(arg1, - arg2, - arg3); +somelongfunctioncall(arg1, + arg2, + arg3); +``` - Function declarations: return type on separate line, {} on separate line, arguments broken up as above. - static inline int - foobar(int a, int b) - { +```c +static inline int +foobar(int a, int b) +{ - } +} - void - somenamethatiswaytoolong(int a, - int b, - int c) - { - } +void +somenamethatiswaytoolong(int a, + int b, + int c) +{ +} +``` -- /* comments only */, no // comments +- `/* comments only */`, no `// comments` -- variable_name, not VariableName or variableName. same for functions. +- `variable_name`, not `VariableName` or `variableName`. same for functions. - no typedefs of structs, enums, unions @@ -48,70 +56,80 @@ at the top. Exception: basic loop variables, e.g. for (int i = 0; ...) - int a; - int c; +```c +int a; +int c; - if (foo) { - int b; +if (foo) { + int b; - c = get_value(); - usevalue(c); - } + c = get_value(); + usevalue(c); +} - if (bar) { - c = get_value(); - useit(c); - } +if (bar) { + c = get_value(); + useit(c); +} +``` - do not mix function invocations and variable definitions. wrong: - { - int a = foo(); - int b = 7; - } +```c +{ + int a = foo(); + int b = 7; +} +``` right: - { - int a; - int b = 7; +```c +{ + int a; + int b = 7; - a = foo(); - } + a = foo(); +} +``` - There are exceptions here, e.g. tp_libinput_context(), - litest_current_device() + There are exceptions here, e.g. `tp_libinput_context()`, + `litest_current_device()` - if/else: { on the same line, no curly braces if both blocks are a single statement. If either if or else block are multiple statements, both must have curly braces. - if (foo) { - blah(); - bar(); - } else { - a = 10; - } +```c +if (foo) { + blah(); + bar(); +} else { + a = 10; +} +``` -- public functions MUST be doxygen-commented, use doxygen's @foo rather than - \foo notation +- public functions MUST be doxygen-commented, use doxygen's `@foo` rather than + `\foo` notation -- include "config.h" comes first, followed by system headers, followed by +- `#include "config.h"` comes first, followed by system headers, followed by external library headers, followed by internal headers. sort alphabetically where it makes sense (specifically system headers) - #include "config.h" +```c +#include "config.h" - #include - #include +#include +#include - #include +#include - #include "libinput-private.h" +#include "libinput-private.h" +``` - goto jumps only to the end of the function, and only for good reasons (usually cleanup). goto never jumps backwards -- Use stdbool.h's bool for booleans within the library (instead of 'int'). +- Use stdbool.h's bool for booleans within the library (instead of `int`). Exception: the public API uses int, not bool.