[cfe-dev] [clang-tidy] RFC: Need feedback on enhancing run-clang-tidy.py to accept and pass @response_files on to clang-tidy

Don Hinton via cfe-dev cfe-dev at lists.llvm.org
Fri Jun 21 17:11:14 PDT 2019


Hi Jonas:

On Fri, Jun 21, 2019 at 2:07 AM Jonas Toth <development at jonas-toth.eu>
wrote:

> Hey,
>
> your task sounds like a "clang-tidy-diff.py" integration into git?
>
> -
> https://github.com/llvm-mirror/clang-tools-extra/blob/master/clang-tidy/tool/clang-tidy-diff.py
> - https://reviews.llvm.org/D57662 (parallelizing it was done as well).
>
> Do you think that suits your needs?
>
Thanks for the pointer.  It's close, and I like that it runs with any diff,
not just git.

However, it has a few issues:

 - doesn't run on headers, even if they are in the diff, unless your
.clang-tidy file has "HeaderFilterRegex: '.*'" or something similar
 - missing option to run clang-format over changes lines
 - line filter means that it only runs on the changed lines

The line filter prevents parallel instances of clang-tidy from changing the
same header multiple times, but limits its usefulness.

My goal is to run the checks over entire files in the change set, so
leveraging run-clang-tidy.py seems like a better option.  Here's the
workflow I had in mind:

 - Create a change set, e.g., via phab
 - commit and push the accepted change, then
 - run the llvm* checks over the files in the change set as a separate
commit and push

Performing the last step in a server side hook, would be optimal.

This may or may not be a workflow that clang/llvm wants, but I still think
it's valid.

thanks again for the pointer...
don

> Best Regards,
> Jonas
> Am 21.06.19 um 04:31 schrieb Don Hinton via cfe-dev:
>
> Btw, the motivation for this custom command is to make it easy to apply a
> set of clang-tidy checks to just the files in your change set, and no
> others.
>
> Obviously, checks that change symbol names wouldn't be appropriate for
> targeted sets like this, so I'm mainly looking to apply the current llvm*
> ones to start with.  And since it accepts a checks= argument and respects
> the .clang-tidy file, I'm hoping it will be generally useful.
>
> On Thu, Jun 20, 2019 at 6:54 PM Don Hinton <hintonda at gmail.com> wrote:
>
>> I'd like to drive run-clang-tidy.py from a git custom command, e.g.:
>>
>>   $ git clang-tidy <commit> [-fix-errors] [etc...]
>>
>> And pass the all the files in the diff, with headers going in
>> '-header-filter='.  This works great for small diffs -- I'm using `git diff
>> -name-only` under the hood to get the list of files -- but large diffs will
>> inevitably generate extremely long command lines.
>>
>> Since clang-tidy can read @response-files, I figure I could just create
>> my super long command line and pass it through, which would require a small
>> change to run-clang-tidy.py.  run-clang-tidy.py could then create
>> individual @respone-files for each clang-tidy instance as needed -- in case
>> the number of headers is large.  To work, each instance would need the
>> complete list of headers in the diff.
>>
>> But, before I go off and start hacking it up, I just wanted to see if
>> anyone had a better idea.  I guess I'll have the pass the file name to
>> python as just a regular option, since the @file notation doesn't seem to
>> be present, but I'm no python expert.
>>
>> Btw, I have a working prototype, loosely based on git-clang-format, which
>> can call either clang-tidy directly in a loop, or pass the entire list to
>> run-clang-tidy.py which can do it in parallel.
>>
>> thanks...
>> don
>>
>
> _______________________________________________
> cfe-dev mailing listcfe-dev at lists.llvm.orghttps://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190621/36ef2731/attachment.html>


More information about the cfe-dev mailing list