[cfe-dev] [clang-tidy] Some possible contributions

Piotr Dziwinski via cfe-dev cfe-dev at lists.llvm.org
Thu Aug 27 09:53:30 PDT 2015


Hello,

I am the author of a static analysis tool using Clang's LibTooling which 
I wrote for the open-source Colobot project 
(https://github.com/colobot/colobot). This tool, which I named 
colobot-lint (https://github.com/colobot/colobot-lint), is written using 
a framework loosely based on the code of clang-tidy.

Now that my little project has matured enough, I think I may contribute 
some of its code back to clang-tidy. However, before I create patches 
and send them to cfe-commits, I'd like to hear some discussion on 
whether you think my code is generic enough and useful enough to be 
included in clang-tidy.

For now I only propose the following two patches based on what I think 
is the most generic of what I wrote. My tool does a lot more, but I 
won't bore you with details here (if you're curious, it's documented in 
README files).


Patch proposal #1: add check for inconsistent parameter names in 
function declarations
This will check for instances of function (re-)declarations which differ 
in parameter names. For example: void foo(int a, int b, int c); in 
header file and void foo(int d, int e, int f) { /*...*/ } in code module 
file.
This check may be useful to enforce consistency in a large project, 
keeping declaration and definition always in sync. In extreme case, I 
think it may even prevent some class of bugs, as declaration may not get 
updated during refactoring and then a person writing code against the 
outdated interface, may get the wrong idea of what parameters to pass to 
the function.


Patch proposal #2: add check for instances of old C-style functions
This will check for instances of legacy functions which use old C-style 
convention of declaring all parameters at the beginning of the function:
void foo()
{
     int a, i;
     /* and later, after many lines in between, there is first use of 
declared variables: */
     a = bar();
     for (i = 0; i < 10; ++i) { /*...*/ }
}
It may be useful for people who have to maintain old codebases and want 
to find instances of such functions to refactor them to "modern" C++ 
style, declaring variables in the place where they are needed. This in 
fact is exactly what we're doing in Colobot project and I imagine there 
are other projects like that.


Please let me know if you think I should proceed with submitting these 
patches. I can also prepare other patches if you think some other parts 
of my code would be useful.

Best regards,
Piotr Dziwinski



More information about the cfe-dev mailing list