[Development] clang-format

Svenn-Arne Dragly svenn-arne.dragly at qt.io
Tue Jul 3 12:42:39 CEST 2018


On 07/03/2018 10:26 AM, Lars Knoll wrote:
>> On 2 Jul 2018, at 16:52, Tor Arne Vestbø <Tor.arne.Vestbo at qt.io
>> > <mailto:Tor.arne.Vestbo at qt.io>> wrote:
>> >
>> >
>> >
>> >> On 2 Jul 2018, at 16:49, Lars Knoll <lars.knoll at qt.io 
>> >> <mailto:lars.knoll at qt.io>> wrote:
>> >>
>> >>
>> >>> On 2 Jul 2018, at 13:35, Tor Arne Vestbø <Tor.arne.Vestbo at qt.io 
>> >>> <mailto:Tor.arne.Vestbo at qt.io>> wrote:
>> >>>
>> >>>
>> >>>> On 2 Jul 2018, at 12:56, Svenn-Arne Dragly <svenn-arne.dragly at qt.io 
>> >>>> <mailto:svenn-arne.dragly at qt.io>> wrote:
>> >>>>
>> >>>> There are also many nice options set in the clang-format config found in Qt 
>> >>>> Creator's sources[2] which I think are interesting. For instance, 
>> >>>> "BinPackParameters: false" and "BinPackArguments: false" makes sure you to 
>> >>>> either put all arguments on one line or give if arguments will have one 
>> >>>> line each. This might be in the controversial category, but it is nice to 
>> >>>> enable while developing. It makes clang-format reflow the code consistently 
>> >>>> just by moving a single argument to a new line and running clang-format 
>> >>>> afterwards.
>> >>>
>> >>> I oppose mandating this style, through clang-format or otherwise.
>> >>
>> >> Having a common style that we start following is worth something. And yes, 
>> >> everybody will always find some details he won't like. So we won't get 
>> >> anywhere if everybody wants it exactly his way.
>> >
>> > Why not ease into this with the non-controversial style-rules first?
>>
>> clang-format will produce one way how the output is formatted. It will reformat
>> your sources a certain way with less definitions in the file as well. So it's
>> most likely better to have more rules defined as it'll give something closer to
>> our implicitly used coding style.
>>
>> Cheers,
>> Lars
>>
Not necessarily. With fewer options set, clang-format does leave some 
things as is, so the output is not always the same. For instance, if you 
leave "BinPackArguments" unset and set "ColumnLimit: 0", clang-format 
will respect your choices regarding argument placement. The following 
code is for instance kept intact in that case:

     auto result = myFunction(arg1, arg2,
                              argument3, arg4, argument5,
                              0, nullptr);

And similarly, this is kept intact:

     auto result = myFunction(arg1, arg2, argument3, arg4,
                              argument5, 0, nullptr);

Setting "BinPackArguments: false" or "ColumnLimit: 100" does on the 
other hand make clang-format reformat the above function call accordingly.

I agree with you, Tor Arne. I think it is better to start out with a 
config with only uncontroversial settings enabled. This already gets us 
pretty far and we'll have fewer arguments about style. And to be clear, 
I also don't want to mandate setting "BinPackArguments: false". I wanted 
to mention it because I found it nice to enable locally, even though it 
is far from perfect. If anything should be mandated with regards to 
argument placement, it should probably be more sophisticated or simply 
rely on a fixed column count.

However, a comprehensive clang-format config would be the best in the 
long run. So even though I think we should start with a minimal config, 
I also think we should start discussing the controversial options in 
separate threads/code reviews. Going through the different options in 
Creator's config is a good start.

Svenn-Arne




More information about the Development mailing list