<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jul 1, 2013 at 2:40 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">On Mon, Jul 1, 2013 at 2:38 PM, Sean Silva <<a href="mailto:silvas@purdue.edu">silvas@purdue.edu</a>> wrote:<br>

><br>
><br>
><br>
> On Mon, Jul 1, 2013 at 2:31 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br>
>><br>
>><br>
>> Have you got any statistics for the current state of LLVM with respect<br>
>> to this formatting issue? If something is already the overwhelmingly<br>
>> common style (& it's not a case where it used to be the style, the<br>
>> style has been updated, and nothing has been migrated yet) then just<br>
>> make clang-format agree with reality - this doesn't require a<br>
>> discussion or bikeshed.<br>
><br>
><br>
> It's not overwhelming, but the preponderance seems to be towards putting it<br>
> on its own line (the exceptions are usually small trait specializations like<br>
> isPodLike). I give some rough numbers here<br>
> <<a href="http://thread.gmane.org/gmane.comp.compilers.llvm.devel/63378" target="_blank">http://thread.gmane.org/gmane.comp.compilers.llvm.devel/63378</a>><br>
<br>
</div>Fair enough - could we draw any further stylistic conclusions that<br>
could motivate clang-format? If the entire definition of the template<br>
fits on one line is it pretty consistent that it's defined on the one<br>
line rather than split? What about template declarations, if any?<br>
<div class=""><div class="h5"><br></div></div></blockquote><div><br></div><div style>As a rough count, there are at least "hundreds" of cases where it changes previously existing template definitions onto one line (i.e., they would fit on one line but they weren't put on one line); this is more than the total number of one-line definitions.  To obtain a lower bound on the cited "hundreds", I clang-format'd everything and then looked for just diff chunks similar to:</div>
<div style><br></div><div style><div>-template <typename T></div><div>-class ImmutableList {</div><div>+template <typename T> class ImmutableList {</div></div><div><br></div><div style>$ cd llvm/</div><div style>
$ clang-format -i **/*.cpp **/*.h</div><div>$ git diff | grep -B2 '^+template' | egrep -B1 '^-(struct|class)' | grep '^-template' | wc -l<br></div><div>287<br></div><div># For comparison<br></div><div>
<div>$ git grep '^\s*template' -- '*.cpp' '*.h' | wc -l</div><div>2011</div></div><div><br></div><div><div>$ cd clang/</div><div>$ clang-format -i **/*.cpp **/*.h</div><div>$ git diff | grep -B2 '^+template' | egrep -B1 '^-(struct|class)' | grep '^-template' | wc -l<br>
</div><div>396</div></div><div># For comparison<br></div><div>$ git grep '^\s*template' -- '*.cpp' '*.h' | wc -l<br></div><div>6713</div><div><br></div><div style>Outside of clang's test/ directory, there are a really tiny number of one-line template definitions in clang:</div>
<div style><div style>$ cd clang/</div><div>$ git grep -E '^\s*template.*(class|struct).*{' -- lib include | wc -l</div><div>60</div></div><div style><br></div><div><br></div><div style>My general feel is that template declarations are usually one-lined in existing code, but it seems that it is about half and half:</div>
<div style>$ git grep -E '^ *template *<[^>]*> *(class|struct) [A-Za-z0-9_]+;' | wc -l<br></div><div style>78</div><div style>$ git grep -A1 -E '^ *template' | egrep -- '- *(struct|class) [A-Za-z0-9_]+;' | wc -l</div>
<div style>72</div><div style><br></div><div style>-- Sean Silva</div></div></div></div>