summaryrefslogtreecommitdiff
path: root/HACKING
blob: 417d42b0f82aacf423e442b45e60e98972462784 (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
Mailing List
============
You can ask questions about the source code on the QtCreator mailing list: qt-creator@trolltech.com

Submitting Patches
==================
We currently prefer patches or git pull urls to be send to the qt-creator mailing list. 
Note, that currently you need to sign a copyright assignment form before we can accept your code into the central repository.
We are working on a better solution for that.

API/ABI stability
=================
We currently do not gurantee any API nor ABI compatibility between releases.

Coding Style
============
We prefer readeable code, one facet of readeable code is having a common 
coding style, thus we ask you to follow the qt coding style, described below.

Indentation
  4 spaces, no tabs

Declaring variables
  Declare each variable on a separate line
  Avoid short (e.g., a,rbarr,nughdeget) names whenever possible
  Single character variable names are only okay for counters and temporaries, where the purpose of the variable is obvious 
  Wait with declaring a variable until it is needed

  Variables and functions start with a small letter. Each consecutive word in a variable's name starts with a capital letter 
  Avoid abbreviations

    // Wrong
    int a, b;
    char *c, *d;

    // Correct
    int height;
    int width;
    char *nameOfThis;
    char *nameOfThat;

Whitespace 
  Use blank lines to group statements together where suited 
  Always use only one blank line
  Always use a single space after a keyword, and before a curly brace.

    // Wrong
    if(foo){
    }

    // Correct
    if (foo) {
    }

  For pointers or references, always use a single space before '*' or '&', but never after. 
  Avoid C-style casts when possible. 
    // Wrong
    char* blockOfMemory = (char* ) malloc(data.size());

    // Correct
    char *blockOfMemory = (char *)malloc(data.size());
    char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));

Braces
  As a base rule, the left curly brace goes on the same line as the start of the statement: 
    // Wrong
    if (codec)
    {
    }

    // Correct
    if (codec) {
    }

  Exception: Function implementations and class declarations always have the left brace on the start of a line:
    static void foo(int g)
    {
        qDebug("foo: %i", g);
    }

    class Moo
    {
    };

  Use curly braces when the body of a conditional statement contains more than one line, and also if a single line statement is somewhat complex. 
    // Wrong
    if (address.isEmpty()) {
        return false;
    }

    for (int i = 0; i < 10; ++i) {
        qDebug("%i", i);
    }

    // Correct
    if (address.isEmpty())
        return false;

    for (int i = 0; i < 10; ++i)
        qDebug("%i", i);

  Exception 1: Use braces also if the parent statement covers several lines / wraps 
    // Correct
    if (address.isEmpty() || !isValid()
        || !codec) {
        return false;
    }

  Exception 2: Use braces also in if-then-else blocks where either the if-code or the else-code covers several lines 
    // Wrong
    if (address.isEmpty())
        --it;
    else {
        qDebug("%s", qPrintable(address));
        ++it;
    }

    // Correct
    if (address.isEmpty()) {
        --it;
    } else {
        qDebug("%s", qPrintable(address));
        ++it;
    }

    // Wrong
    if (a)
        if (b)
            ...
        else
            ...

    // Correct
    if (a) {
        if (b)
            ...
        else
            ...
    }

  Use curly braces when the body of a conditional statement is empty 
    // Wrong
    while (a);

    // Correct
    while (a) {}

Parentheses
  Use parentheses to group expressions: 
    // Wrong
    if (a && b || c)

    // Correct
    if ((a && b) || c)

    // Wrong
    a + b & c

    // Correct
    (a + b) & c

Line breaks 
  Keep lines shorter than 100 characters; insert line breaks if necessary. 
  Commas go at the end of a broken line; operators start at the beginning of the new line. The operator is at the end of the line to avoid having to scroll if your editor is too narrow. 
    // Wrong
    if (longExpression +
        otherLongExpression +
        otherOtherLongExpression) {
    }

    // Correct
    if (longExpression
        + otherLongExpression
        + otherOtherLongExpression) {
    }


General exception 
  Feel free to break a rule if it makes your code look bad.