Skip to content

Commit

Permalink
Move CODING_STYLE to markdown
Browse files Browse the repository at this point in the history
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
  • Loading branch information
whot committed Jun 13, 2018
1 parent a23414d commit 50ca923
Showing 1 changed file with 75 additions and 57 deletions.
132 changes: 75 additions & 57 deletions CODING_STYLE → 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

Expand All @@ -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.

0 comments on commit 50ca923

Please sign in to comment.