[![Build Status](https://travis-ci.org/bloodstalker/cgrep.svg?branch=master)](https://travis-ci.org/bloodstalker/cgrep) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/bloodstalker/cgrep.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/bloodstalker/cgrep/context:cpp) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fbloodstalker%2Fcgrep.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fbloodstalker%2Fcgrep?ref=badge_shield) # cgrep `grep` for C/C++ source files.
Should be more or less fine for other C-family languages as well but I haven't tested for those since I don't use those. Let me know if you run into trouble using cgrep on those.
The goal is to make the options and features as similar to `grep` as possible for ease of use.
## Bulding Assuming you have the llvm/clang libraries(the build file will read your llvm options using `llvm-config` so make sure it's in path), just run:
```bash git clone https://github.com/bloodstalker/cgrep git submodule init git submodule update make ``` `cgrep` supports LLVM 5,6,8,9. For 10. the latest tested trunk version is:367652. support for 5 and 6 might be dropped in the future.
The makefile assumes clang is called `clang` and llvm-config is called `llvm-config`. On some distros, the names might not be the same. In those cases use `CXX` and `LLVM_CONF` to pass the values to the makefile.
## Usage A simple usage example:
```bash cgrep -A 1 -B 1 --func --var --regex n[aA]m ./cgrep.cpp ``` Pleade do note that the regex will pass through both C++ and the regex engine, so if you would want to escape `\`, the regex you pass as the commandline arg would be `\\\\` instead of the normal `\\`.
In order for cgrep to work, you need to have a compilation database, tools like cmake can generate one for you.
If your build tool doesn't do that, you can just use [bear](https://github.com/rizsotto/Bear).
You can also skip the compilation database alltogether passing cgrep `--` after the input file name.
## Options Here's an option list though it might not be necessarily up-to-date.
For an up-to-date list, you can run `crep --help`.
```bash -A= - same as grep, how many lines after the matched line to print -B= - same as grep, howm many lines before the matched line to print -all - turns on all switches other than nameddecl -awk - outputs location in a gawk freidnly format -call - match function calls only -class - match class declrations only -cxxcall - match member function calls only -declrefexpr - matches declrefexpr -dir= - recursively goes through all the files and directories. assumes compilation databases are present for all source files. -func - match functions only -header - match headers in header inclusions -macro - match macro definitions -mainfile - mathc identifiers in the main file only -memfunc - match member functions only -memvar - match member variables only -nameddecl - matches all named declrations -regex= - the regex to match against -struct - match structures only -syshdr - match identifiers in system header as well -union - match unions only -var - match variables only ``` `cgrep` is a clang tool, so it will accecpt all valid clang commandline options.
## Known Issues * bulding cgrep with `-j` will not work because shitty makefile.
* the coloring is off right now and doesn't work properly.
======= ## License [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fbloodstalker%2Fcgrep.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fbloodstalker%2Fcgrep?ref=badge_large) =======