[cfe-dev] [clang-tidy] Some possible contributions
Piotr Dziwinski via cfe-dev
cfe-dev at lists.llvm.org
Fri Aug 28 09:14:33 PDT 2015
Hello,
Thanks for all replies so far. I'm glad that you agree that my code
would be useful. I'll post some patches for review sometime during this
weekend.
I also got a private reply from Eugene Zelenko, who pointed me to his
feature request for localizing variables:
https://llvm.org/bugs/show_bug.cgi?id=21992.
This feature request would be partly implemented by my check for old
C-style functions. To fully implement the proposed behavior, I would
need to extend my code with FixIt hints to enable automated refactoring.
Since that would require quite a bit of work, I would propose to first
commit only my basic check for finding such functions and once I find
enough time, I would add support for refactoring.
On 2015-08-28 10:16, Marek Kurdej wrote:
>
> I've had a quick look at colobot-lint and, IMO, it would be nice to
> add some other checks, e.g. NakedNew, NakedDelete, ImplicitBoolCast
> may be of interest.
Regarding NakedNew and NakedDelete, I wasn't sure if there were similar
checks already implemented or proposed for implementation. I think that
if I should post a patch here, I would join these two checks to single
check called for instance ManualMemoryManagement.
As for ImplicitBoolCast, I think it's also worth to consider. It's very
useful in case of such unfortunate "features" of C++ as implicit bool ->
float casts, which caused quite a bit of problems in Colobot project at
one point.
However, this check also restricts pointer -> bool casts, so it would
find issue with such code:
void foo(int* ptr)
{
if (ptr) // warning: implicit int* -> bool cast
{ /* ... */ }
}
I personally don't like such style, so I added this restriction, but
there is nothing really wrong in such code. I guess it's more a matter
of taste, so perhaps this conversion can be enabled/disabled with
appropriate config option.
On 2015-08-28 10:16, Marek Kurdej wrote:
>
> BTW, does your InconsistentDeclarationParameterNameRule handles unused
> parameters (i.e. those that have names in the declaration, but are
> marked /*unused*/ or something along these lines in the definition)?
No, it does not. Unused (unnamed) parameters are currently ignored in
comparison. I wanted to check for such parameters which names are
commented out, but unless I'm missing something, there is no easy way
right now to match parameter declaration to a comment next to it, as we
have access to comments only during the preprocessing phase. Of course,
I can sort of "hack" it, by getting character buffer from SourceManager
and scanning characters of source code, but it seems a very crude way to
handle this. (Well, I was forced to use such mechanism for my
BlockPlacement check, but that's another topic.)
Best regards,
Piotr Dziwinski
On 2015-08-28 10:16, Marek Kurdej wrote:
> Hi Piotr,
>
> I think that it would be great to add your checks to clang-tidy.
> I've had a quick look at colobot-lint and, IMO, it would be nice to
> add some other checks, e.g. NakedNew, NakedDelete, ImplicitBoolCast
> may be of interest.
>
> BTW, does your InconsistentDeclarationParameterNameRule handles unused
> parameters (i.e. those that have names in the declaration, but are
> marked /*unused*/ or something along these lines in the definition)?
>
> Regards,
> Marek Kurdej
>
>
> ---------- Wiadomość przekazana dalej ----------
> From: Piotr Dziwinski via cfe-dev <cfe-dev at lists.llvm.org
> <mailto:cfe-dev at lists.llvm.org>>
> To: cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> Cc:
> Date: Thu, 27 Aug 2015 18:53:30 +0200
> Subject: [cfe-dev] [clang-tidy] Some possible contributions
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150828/a111d0a7/attachment.html>
More information about the cfe-dev
mailing list