xaizek / for-postfix (License: GPLv2+) (since 2018-12-07)
Clang-based standalone tool that detects for-loops with postfix operators.
<root> / README.md (03302a1e2efbe284df801485d5776077946c2788) (1,217B) (mode 100644) [raw]
Brief description
-----------------

Clang-based standalone tool that detects for-loops with postfix operators.

Example
-------

Input:

```c++
#include <cstdlib>

#include <vector>

inline void
doNothing()
{
    // do nothing on purpose
}

int
main(void)
{
    std::vector<int> v;
    typedef std::vector<int> intVector;

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); cit++) {
        doNothing();
    }

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
        doNothing();
    }

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); cit--) {
        doNothing();
    }

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); --cit) {
        doNothing();
    }

    return EXIT_SUCCESS;
}
```

Run command:

```sh
bin/for-postfix vector-all.cpp --
```

Output (paths are truncated):

```
.../vector-all.cpp:17:dangerous use of postfix operator
.../vector-all.cpp:25:dangerous use of postfix operator
```

Building
--------

1. Clone the repository to `llvm/tools/clang/tools/extra`.
2. Add `add_subdirectory(for-postfix)` to `CMakeLists.txt` in the same 
   directory.
3. Run `ninja for-postfix` inside your LLVM's `build/` directory.
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/for-postfix

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/for-postfix

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master