[cfe-dev] [clang-tidy] Some possible contributions
Piotr Dziwinski via cfe-dev
cfe-dev at lists.llvm.org
Sun Aug 30 03:49:56 PDT 2015
I posted these two patches for review:
- inconsistent declaration parameter name: http://reviews.llvm.org/D12462
- old style function: http://reviews.llvm.org/D12473
Should I also add reviewers to these reviews?
Best regards,
Piotr Dziwinski
On 2015-08-28 18:14, Piotr Dziwinski wrote:
> 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>
>> 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/20150830/f5265799/attachment.html>
More information about the cfe-dev
mailing list