notepad-plus-plus/CONTRIBUTING.md

200 lines
3.7 KiB
Markdown

#Contributing
Your pull requests are welcome; however, they may not be accepted for various reasons.
##Guidelines for pull requests:
1. Respect Notepad++ coding style.
2. Make a single change per commit.
3. Make your modification compact - don't reformat source code in your request. It makes code review more difficult.
4. PR of reformating (changing of ws/TAB, line endings or coding style) of source code won't be accepted. Use issue trackers for your request instead.
5. Only bug-fix and feature request will be accepted. For the other things, I can run static code analysis tool myself.
In short: The easier the code review is, the better the chance your pull request will get accepted.
##Coding style:
####GENERAL
* Do not use Java-like braces:
GOOD:
```c
if ()
{
// Do something
}
```
BAD:
```c
if () {
// Do something
}
```
* Use tabs instead of whitespaces (we usually set our editors to 4
whitespaces for 1 tab, but the choice is up to you)
* Always leave one space before and after binary and ternary operators
Only leave one space after semi-colons in "for" statements.
GOOD:
```c
if (10 == a && 42 == b)
```
BAD:
```c
if (a==10&&b==42)
```
GOOD:
```c
for (int i = 0; i != 10; ++i)
```
BAD:
```c
for(int i=0;i<10;++i)
```
* Keywords are not function calls.
Function names are not separated from the first parenthesis:
GOOD:
```c
foo();
myObject.foo(24);
```
BAD:
```c
foo ();
```
* Keywords are separated from the first parenthesis by one space :
GOOD:
```c
if (true)
while (true)
```
BAD:
```c
if(myCondition)
```
* Use the following indenting for "switch" statements
```c
switch (test)
{
case 1:
{
// Do something
break;
}
default:
// Do something else
} // No semi-colon here
```
* Avoid magic numbers
BAD:
```c
while (lifeTheUniverseAndEverything != 42)
lifeTheUniverseAndEverything = buildMorePowerfulComputerForTheAnswer();
```
GOOD:
```c
if (foo < I_CAN_PUSH_ON_THE_RED_BUTTON)
startThermoNuclearWar();
```
* Prefer enums for integer constants
####NAMING CONVENTIONS
* Classes (camel case) :
GOOD:
```c
class IAmAClass
{};
```
BAD:
```c
class iAmClass
{};
class I_am_class
{};
```
* methods (camel case + begins with a lower case)
method parameters (camel case + begins with a lower case)
GOOD:
```c
void myMethod(uint myVeryLongParameter);
```
* member variables
Any member variable name of class/struct should be preceded by an underscore
```c
public:
int _publicAttribute;
private:
int _pPrivateAttribute;
float _pAccount;
```
* Always prefer a variable name that describes what the variable is used for
GOOD:
```c
if (hours < 24 && minutes < 60 && seconds < 60)
```
BAD:
```c
if (a < 24 && b < 60 && c < 60)
```
####COMMENTS
* Use C++ comment line style than c comment style
GOOD:
```
// Two lines comment
// Use still C++ comment line style
```
BAD:
```
/*
Please don't piss me off with that
*/
```
####BEST PRACTICES
* Prefer this form :
```c
++i
```
to
```c
i++
```
(It does not change anything for builtin types but it would bring consistency)
* Avoid using pointers. Prefer references. You might need the variable to
be assigned a NULL value: in this case the NULL value has semantics and must
be checked. Wherever possible, use a SmartPtr instead of old-school pointers.
* Avoid using new if you can use automatic variable.
* Don't place any "using namespace" directives in headers
* Compile time is without incidence. Increasing compile time to reduce execution
time is encouraged.
* Code legibility and length is less important than easy and fast end-user experience.