[llvm-dev] [RFC] Semi-Automatic clang-format of files with low frequency

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Tue Jun 30 11:45:05 PDT 2020


On 6/30/20 1:19 PM, MyDeveloper Day via llvm-dev wrote:
> I 100% get that we might not like the decisions clang-format is 
> making, but how does one overcome this when adding new code? The 
> pre-merge checks enforce clang-formatting before commit and that's a 
> common review comment anyway for those who didn't join the pre-merge 
> checking group.


Those checks are advisory. I do not recall a case where 
thoughtfully-hand-formatted code was proposed, adhering to the coding 
guidelines, and a reviewer asked for the file to be run through 
clang-format. When the thoughtfully-formatted code does not match what 
clang-format would produce in such cases, it's generally obvious why. 
Normally, this request is made where the file is inconsistently 
formatted, or formatted in a way that obviously does not comply with our 
guidelines.

I've observed that there is a wide spectrum of developer preferences: 
some thoughtfully and deliberately format all of their code, others deal 
with formatting only when they feel like they absolutely must and are 
happy to have a tool that does anything consistent. Most people are 
probably somewhere in between.


> I'm just wondering are we not all following the same guidelines?


We have specific guidelines that everyone should follow. clang-format 
implements a superset of those.

Here's a counter-proposal: You should hook up a tool that automatically 
opens Phabricator reviews to clang-format the source code. It should do 
this at a very low rate. It may take years to get through everything. 
But, humans will look at the formatting changes, and where clang-format 
should be improved instead of changing the code, we'll discover and 
classify those things. Formatted files can be noted, however, to 
incrementally build the clang-format test suite.


>
> Concerns of clang-format not being good enough are fair enough, but 
> that's the area I'm focusing my development efforts on (as that's 
> where I've been trying to make a small contribution). This effort was 
> driven out of a need in my view to have an extensive test suite to 
> validate new changes to clang-format don't break the formatting of 
> pre-formatted code. This isn't that possible with LLVM at the moment 
> because large parts are not formatted.
>
> However checking a code base which is in high flux but one that 
> maintains a 100% clang-format clean status, is a near perfect 
> test-suite. Especially one that I assume will have unit tests for the 
> latest C++ features.
>
> I'm not bored ;-) and whilst I understand this feels somewhat 
> periphery to the seemingly much more pressing task of developing the 
> next best compiler, I think we have to remember that clang-format is 
> extensively used. (In my view by many more people than those actually 
> using clang). GitHub reports 32,000 YAML files with the BasedOnStyle: 
> LLVM alone that is present in the .clang-format file


Independent of everything else, this is a great success. Maybe we should 
have a website with a tracker on it or something.

Thanks again,

Hal


>
> I realize it feels like unnecessary churn which is why I suggested 
> this be in code which hasn't been touched in some time (I'd be fine if 
> that time is 1+ years), but more often than not this is quite small 
> basic style issues, similar to the ones below.
>
> MyDeveloperDay
>
> -  void HandleTranslationUnit(ASTContext& context) override {
> +  void HandleTranslationUnit(ASTContext &context) override {
>      if (!Instance.getLangOpts().DelayedTemplateParsing)
>        return;
>
> -      std::set<FunctionDecl*> LateParsedDecls;
> +      std::set<FunctionDecl *> LateParsedDecls;
>
> On Tue, Jun 30, 2020 at 6:55 PM Matt Arsenault <arsenm2 at gmail.com 
> <mailto:arsenm2 at gmail.com>> wrote:
>
>
>
>>     On Jun 28, 2020, at 11:30, MyDeveloper Day via llvm-dev
>>     <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>>     I’m a contributor to clang-format and would like to see LLVM 100%
>>     clang formatted so we can use LLVM as a massive test-suite for
>>     clang-format when we make changes.
>>
>>
>
>     My main issue with this would be that clang-format does things
>     that I don’t believe are stated in the LLVM style guide and I also
>     disagree with. There’s a whole set of cases where it makes
>     unwelcome changes to put things that were on separate lines on a
>     single line. Whenever I run clang-format, I typically git checkout
>     -p to discard all of these.
>
>     For example, it likes to take member initializer lists and pack
>     them into as few lines as possible. This is just asking for merge
>     conflicts (e.g. AMDGPUSubtarget has a ton of fields in it, and out
>     of tree code is constantly adding new fields for unreleased
>     subtargets). It also mangles BuildMI calls, where I believe every
>     .add() should be on its own line, and stringing this into
>     BuildMI().addFoo().addBar() is way less readable.
>
>     I also believe it’s 4 space indent on line wraps differs from the
>     stated 2 space indent level (and this also disagrees with emacs
>     llvm-style)
>
>     -Matt
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200630/e53127cd/attachment.html>


More information about the llvm-dev mailing list