diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5ea13817..24eef4f1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,12 @@ Note that cutter is still under development and many parts of the code are to be ### CutterCore class -This is the main class where every link with r2 is made. It is *unique* accross the whole process. To access it, simply call `CutterCore::getInstance()`. +This is the main class where every link with r2 is made. It is *unique* accross the whole process. To access it, simply call `Core()`. + +Example: +```c++ +Core()->getOffset(); +``` ### Calling a radare2 command @@ -22,10 +27,20 @@ There are two ways to do it: * `CutterCore::cmd()` *(Discouraged)* Only use it for commands which yells no output * `CutterCore::cmdj()` To be used with json commands like `cmdj("agj")` or `cmdj("aflj")`. It is way easier to parse a json output. +Example: +```c++ +QJsonArray array = Core()->cmdj("pdj 1 @ main").array(); +``` + ### Seek the current file To modify radare2 seek use `CutterCore::seek(const RVA offset)`. This is important because it will emit a `CutterCore::seekChanged(RVA offset)` signal. -Never ever call cmd("s offset"); +Never ever call `cmd("s offset")`; + +Example: +```c++ +Core()->seek(0xdeadbeef); +``` ### Creating a widget @@ -33,7 +48,7 @@ Make sure to connect the `CutterCore::seekChanged(RVA offset)` signal so your wi ## General coding guidelines -### Code formatting +### Coding style We follow [these guidelines](https://wiki.qt.io/Qt_Coding_Style) to format the code. If in doubt, you can use [AStyle 2.06](https://sourceforge.net/projects/astyle/files/astyle/astyle%202.06/) to format the code. The command line for formatting the code according to the style is: @@ -42,6 +57,32 @@ If in doubt, you can use [AStyle 2.06](https://sourceforge.net/projects/astyle/f astyle --project=src/Cutter.astylerc src/filename.cpp ``` +#### Loops + +We use C++11 foreach loop style which means any "foreach" loop should look like: +```c++ +for (QJsonValue value : importsArray) { + doSomething(value); +} +``` + +#### Nullptr + +Please do not use `0` nor `Q_NULLPTR`, only use `nullptr`. + +Example: +```c++ +QObject *object = nullptr; +``` + +#### Connecting signals + +To connect a signal to a slot, this is the preferred way to do it: +```c++ +connect(sender, &QObject::destroyed, this, &MyObject::objectDestroyed); +``` +The main reason is that this syntax allows the use of lambda functions. + ### Functions documentation It's good to add some documentation to your functions when needed. To do so we follow these [rules](http://doc.qt.io/qt-5/qdoc-guide-writing.html).