aboutsummaryrefslogtreecommitdiff
path: root/CONTRIBUTING.md
blob: 5e4cdb2820cb8d31d8f20918e6790e4bf3bd1a98 (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
93
94
95
96
## Reporting

### Reporting bugs
Please include the following when reporting bugs:
* Operating system used
* Version of Qt used
* Detailed explanation of the bug: 
  * what was done
  * what was expected
  * what happened

## Contributing

### General code rules
* Use generic formats

### Hooks
Symlink the hooks:
```
[smolbote repo]$ ln -s ../../tools/hooks/pre-commit.rb .git/hooks/pre-commit
```

### Code
* Where possible, use QVector over QList: 
http://lists.qt-project.org/pipermail/development/2017-March/029040.html

### 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.

### Branching
* master - main branch, should be kept up-to-date, and have only working code
* next - next stable release preparation, mostly for bugfixes
* development - development branch, anything goes there

### Folder structure

  folder       | description
  ------       | -----------
/src           | source code
/src/widgets   | subclassed Qt widgets
/src/formats   | file format parsing (toml, xbel)
/src/forms     | Qt UI forms and classes
/src/webengine | QWebEngine subclasses
/test          | test run location, mainly for QtCreator

### Licensing
Please include an appropriate license header in any file you add. A sample GPLv3
header is included in docs/header-gpl3.txt.

The provided pre-commit hook uses the following regular expression to check for
a license:
```ruby
/Copyright\s\(C\)\s(\d{4}\s*-\s*){0,1}(#{Time.now.year})/
```

### QtCreator
* In the project Run Settings set the working directory to _$repo/test_, and the
command line arguments to _-c poi.conf_.

### firejail
Any submitted modifications should work with the provided firejail profile.

### clazy
You can use [clazy](clazy-git) to check Qt semantics. Requires clang.

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

#### 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-git]: https://github.com/KDE/clazy
[clazy-sysincludes]: http://lists.qt-project.org/pipermail/qbs/2017-April/001709.html