aboutsummaryrefslogtreecommitdiff
path: root/docs/manual/Contributing.md
blob: c6d1bcdc21e2a610b9499ba8f195e3cd36d078c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Code style

## Guidelines
* Use generic formats

## Versioning
- major version: Changed infrequently and almost entirely out of foppery and whim.
- minor version: Milestone of multiple features.
- revision: Major bugfixes and each new feature should get a revision.

## Qt
* Check pointers with ´´´Q_CHECK_PTR´´´ before using or returning them.
* Avoid using connect SIGNAL and SLOT. Instead use &Class::method. This way, connects are checked during the compile, not at runtime.
* Where possible, use QVector over QList: http://lists.qt-project.org/pipermail/development/2017-March/029040.html

## clazy
You can use [clazy](https://github.com/KDE/clazy) to check Qt semantics. 
Requires clang.

To set check levels, set the CLAZY_CHECKS environment variable to 'level0,level1', etc.

### Setting up in qbs
1. Create a profile for clazy
```
qbs-setup-toolchains --type clang /usr/bin/clazy clazy
qbs-config profiles.clazy.cpp.cCompilerName clang
qbs-config profiles.clazy.cpp.cxxCompilerName clazy
```
2. Create a profile for qt5-clazy
```
qbs-setup-qt /usr/bin/qmake-qt5 qt5-clazy
qbs-config profiles.qt5-clazy.baseProfile clazy
```

### Setting up in QtCreator
The simplest way to set it up is to use _clazy_ instead of _clang_.

1. Go to Tools » Options » Build & Run » Compilers
2. Clone the clang compiler of your choice
3. Set _Compiler path_ to _/usr/bin/clazy_

This will update the qbs profile that QtCreator uses.

### Reducing clazy noise
If you want to suppress warnings from headers of Qt or 3rd party code, include
them with -isystem instead of -I. To do this, you have to
[modify your Qt profile](clazy-sysincludes) like this:

Find the profile's search path:
```sh
$ qbs config --list profiles.qt562.preferences
profiles.qt562.preferences.qbsSearchPaths: "/home/someone/.config/QtProject/qbs/1.9.0/profiles/qt562"
```

Replace cpp.includePaths with cpp.systemIncludePaths in the Qt modules of that profile:

```sh
$ find /home/someone/.config/QtProject/qbs/1.9.0/profiles/qt562/modules/Qt/ -name '*.qbs' | xargs -n1 sed -i s/cpp\.includePaths/cpp.systemIncludePaths/
```

[clazy-sysincludes]: http://lists.qt-project.org/pipermail/qbs/2017-April/001709.html

# Before you submit

## Licensing
Smolbote is licensed under GPLv3 _only_. Your code needs to be compatible with
it, and have a license header in the style used by the project.

### SPDX-License-Identifier
A full list of license identifiers can be found on [the SPDX website](https://spdx.org/licenses/).

## Style
Please use the [One True Brace style](https://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS_.28OTBS.29).
Tabs are 4 spaces.

For ease of use, you can set the following astyle configuration:
```
--style=otbs
--attach-namespaces
--attach-inlines
--indent=spaces=4
```

## Format patch for email
```sh
git format-patch hash
```
where _hash_ is the commit immediately prior to the commit or series of commits 
you want to submit.

Attach the patch file and email it to _aqua at iserlohn-fortress.net_. If
possible, GPG sign the email.