From da9592f0d8ee93a19771e52bd549da847880de92 Mon Sep 17 00:00:00 2001 From: Waleed Khan Date: Thu, 7 Aug 2014 11:52:40 -0400 Subject: [PATCH] Added style guide. --- CONTRIBUTING.md | 105 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..e9fe37a0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,105 @@ +# Style Guide # + +### Compatibility ### + +Cockatrice is written in C++-03, so do not use C++11 constructs such as `auto`. + +Cockatrice support both Qt 4 and Qt 5, so make sure that your code compiles +with both. If there have been breaking changes between Qt 4 and 5, use a +statement such as + + #if QT_VERSION >= 0x500000 + doSomethingWithQt5(); + #else + doSomethingWithQt4(); + #endif + +For consistency, use Qt data structures where possible, such as `QString` over +`std::string` or `QList` over `std::vector`. + +### Header files ### + +Use header files with the extension `.h` and source files with the extension +`.cpp`. + +Use header guards in the form of `FILE_NAME_H`. + +Simple functions, such as getters, may be written inline in the header file, +but other functions should be written in the source file. + +Keep library includes and project includes grouped together. So this is okay: + + // Good: + #include + #include + #include "card.h" + #include "deck.h" + + // Good: + #include "card.h" + #include "deck.h" + #include + #include + + // Bad: + #include + #include "card.h" + #include + #include "deck.h" + +### Naming ### + +Use `UpperCamelCase` for classes, structs, enums, etc. and `lowerCamelCase` for +function and variable names. + +Member variables aren't decorated in any way. Don't prefix or suffix with +underscores, etc. + +For arguments to constructors which have the same names as member variables, +prefix those arguments with underscores: + + MyClass::MyClass(int _myData) + : myData(_myData) + {} + +Pointers and references should be denoted with the `*` or `&` going with the +variable name: + + // Good: + Foo *foo1 = new Foo; + Foo &foo2 = *foo1; + + // Bad: + Bar* bar1 = new Bar; + Bar& bar2 = *bar1; + +Use `0` instead of `NULL` (or `nullptr`) for null pointers. + +### Braces ### + +Use K&R-style braces. Braces for function implementations go on their own +lines, but they go on the same line everywhere else: + + int main() + { + if (someCondition) { + doSomething(); + } else { + while (someOtherCondition) { + doSomethingElse(); + } + } + } + +Braces can be omitted for single-statement if's and the like, as long as it is +still legible. + +### Tabs ### + +Use only spaces. Four spaces per tab. + +### Lines ### + +Do not have trailing whitespace in your lines. + +Lines should be 80 characters or less, as a soft limit.