Following a discussion with the great Julia Lawall, she added a new feature in coccinelle: it is now possible to define as set or unset some variables. This option has been added in coccigrep 1.9 and requires coccinelle 1.0-rc14.
For example, let’s have a code like Suricata where a lot of unit tests are implemented. The structure of the code is the following:
REGULAR CODE #ifdef UNITTESTS TEST CODE #endif
When doing search in the regular code, you don’t want to be bothered by results found in the test code. To obtain this result, you can pass the -U UNITTESTS option to coccigrep to tell him to consider UNITTESTS variable as undefined. If you want to define a variable, you can use the -D flag.
If you are using coccigrep inside vim, you can set the coccigrep_path variable with this option. The basic vim syntax is:
let g:coccigrep_path="coccigrep -U UNITTESTS"
As I wanted to have it for all query in my Suricata source directory, I’ve added at the end of my ~/.vim/after/syntax/suricata.vim file:
autocmd BufEnter,BufNewFile,BufRead */git/oisf/* let g:coccigrep_path="coccigrep -U UNITTESTS"