Commit 50ca923c authored by Peter Hutterer's avatar Peter Hutterer

Move CODING_STYLE to markdown

Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent a23414dd
- 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 <stdio.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
#include <libevdev/libevdev.h>
#include <libevdev/libevdev.h>
#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.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment