[llvm-dev] Change coding style for argument alignment?
Mehdi AMINI via llvm-dev
llvm-dev at lists.llvm.org
Thu Dec 3 13:47:51 PST 2020
On Thu, Dec 3, 2020 at 1:01 PM Nikita Popov via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hi,
>
> LLVM currently uses a coding style where arguments and parameters need to
> be aligned to the opening parenthesis "(".
>
> someFunctionCall(Arg1, Arg2,
> Arg3, Arg4);
>
> This style guideline is unfortunate for a couple of reasons:
>
> 1. If a function is renamed, it is necessary to also reindent the
> arguments at all call-sites. For functions with many or complex arguments,
> this may require significant reflow.
>
Why is this a problem though? This is all automated by clang-format in
practice.
>
> 2. It causes significant right-ward drift. Especially for declarations,
> it's somewhat common for code ending up like this...
>
> Foo SomeClassName::someMethodName(Bar &Arg1,
> Bar &Arg2,
> Bar &Arg3,
> Bar &Arg4) {
>
> ... because there is just enough space to fit each argument individually,
> but still a need to break each one out on a separate line. Closure
> arguments are another common case of very awkward formatting.
>
Seems like clang-format has some heuristics for this, I wrote this in a
file:
Foo SomeClassName::someveryveryveryveryverylongMethodName(Bar &Arg1, Bar
&Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar &Arg8) {}
Foo SomeClassName::someveryveryveryveryveryverylongMethodName(Bar &Arg1,
Bar &Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar
&Arg8) {}
Foo SomeClassName::someMethodName(Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar
&Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar &Arg8) {}
and clang-format print it this way:
Foo SomeClassName::someveryveryveryveryverylongMethodName(Bar &Arg1, Bar
&Arg2,
Bar &Arg3, Bar
&Arg4,
Bar &Arg5, Bar
&Arg6,
Bar &Arg7,
Bar &Arg8) {}
Foo SomeClassName::someveryveryveryveryveryverylongMethodName(
Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar
&Arg7,
Bar &Arg8) {}
Foo SomeClassName::someMethodName(Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar
&Arg4,
Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar
&Arg8) {}
>
> 3. There are some arcane rules about when this is not the preferred style
> and you're supposed to indent arguments on the following line instead.
>
> Is there any chance that the style could be changed towards indenting (but
> not aligning) the following line instead?
>
> someFunctionCall(
> Arg1, Arg2, Arg3, Arg4);
>
Is there an existing clang-format setting to hook up to already?
>
> This is unaffected by renames, does not cause rightward drift and results
> in very predictable formatting.
>
> Based on past discussions, LLVM seems to be open to improving coding style
> for the better, so I thought I'd give this a shot, as this is a continuous
> source of friction for me.
>
> Regards,
> Nikita
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20201203/be772886/attachment.html>
More information about the llvm-dev
mailing list