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