<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Dec 3, 2020 at 1:01 PM Nikita Popov via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div><br></div><div>LLVM currently uses a coding style where arguments and parameters need to be aligned to the opening parenthesis "(".</div><div><br></div>    someFunctionCall(Arg1, Arg2,<br><div>                     Arg3, Arg4);</div><div><br></div><div>This style guideline is unfortunate for a couple of reasons:</div><div><br></div><div>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.</div></div></blockquote><div><br></div><div>Why is this a problem though? This is all automated by clang-format in practice.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>2. It causes significant right-ward drift. Especially for declarations, it's somewhat common for code ending up like this...</div><div><br></div><div>   Foo SomeClassName::someMethodName(Bar &Arg1,<br>                                      Bar &Arg2,<br>                                      Bar &Arg3,<br>                                      Bar &Arg4) {</div><div><br></div><div>... 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.<br></div></div></blockquote><div><br></div><div>Seems like clang-format has some heuristics for this, I wrote this in a file:</div><div><br></div><div><div><font face="monospace">Foo SomeClassName::someveryveryveryveryverylongMethodName(Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar &Arg8) {}</font></div><div><font face="monospace">Foo SomeClassName::someveryveryveryveryveryverylongMethodName(Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar &Arg8) {}</font></div><div><font face="monospace">Foo SomeClassName::someMethodName(Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar &Arg8) {}</font></div></div><div><br></div><div>and clang-format print it this way:</div><div><br></div><div><div><br></div><div><font face="monospace">Foo SomeClassName::someveryveryveryveryverylongMethodName(Bar &Arg1, Bar &Arg2,</font></div><div><font face="monospace">                                                          Bar &Arg3, Bar &Arg4,</font></div><div><font face="monospace">                                                          Bar &Arg5, Bar &Arg6,</font></div><div><font face="monospace">                                                          Bar &Arg7,</font></div><div><font face="monospace">                                                          Bar &Arg8) {}</font></div><div><font face="monospace">Foo SomeClassName::someveryveryveryveryveryverylongMethodName(</font></div><div><font face="monospace">    Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar &Arg4, Bar &Arg5, Bar &Arg6, Bar &Arg7,</font></div><div><font face="monospace">    Bar &Arg8) {}</font></div><div><font face="monospace">Foo SomeClassName::someMethodName(Bar &Arg1, Bar &Arg2, Bar &Arg3, Bar &Arg4,</font></div><div><font face="monospace">                                  Bar &Arg5, Bar &Arg6, Bar &Arg7, Bar &Arg8) {}</font></div></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div><br></div><div>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.</div><div><br></div><div>Is there any chance that the style could be changed towards indenting (but not aligning) the following line instead?<br></div><div><br></div><div>    someFunctionCall(</div><div>        Arg1, Arg2, Arg3, Arg4);</div></div></blockquote><div><br></div><div>Is there an existing clang-format setting to hook up to already?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>This is unaffected by renames, does not cause rightward drift and results in very predictable formatting.</div><div><br></div><div>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.<br></div><div><br></div><div>Regards,<br></div><div>Nikita<br></div></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div></div></div>