<div dir="ltr">On Wed, Feb 6, 2013 at 1:04 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank" class="cremed">djasper@google.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: djasper<br>
Date: Wed Feb  6 15:04:05 2013<br>
New Revision: 174545<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=174545&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=174545&view=rev</a><br>
Log:<br>
Become a little smarter with formatting long chains of pipes.<br>
<br>
Assign a high penalty to breaking before "<<" if the previous token is a<br>
string literal ending in ":" or "=".<br></blockquote><div><br></div><div style>Other places where I think the same core idea might apply (apologies if it duplicates other discussions or bugs):</div><div style>
<br></div><div style><< "Target time -> " << time</div><div style><< "this is scary (" << time << ")"</div><div style><< "array[" << x << "] = " << something // I used both!</div>
<div><br></div><div style>Anyways, this is totally awesome. =D</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Before:<br>
llvm::outs()<br>
    << "aaaaaaaaaaaaaaaaa = " << aaaaaaaaaaaaaaaaa << "bbbbbbbbbbbbbbbbb = "<br>
    << bbbbbbbbbbbbbbbbb << "ccccccccccccccccc = " << ccccccccccccccccc<br>
    << "ddddddddddddddddd = " << ddddddddddddddddd << "eeeeeeeeeeeeeeeee = "<br>
    << eeeeeeeeeeeeeeeee;<br>
<br>
After:<br>
llvm::outs() << "aaaaaaaaaaaaaaaaa = " << aaaaaaaaaaaaaaaaa<br>
             << "bbbbbbbbbbbbbbbbb = " << bbbbbbbbbbbbbbbbb<br>
             << "ccccccccccccccccc = " << ccccccccccccccccc<br>
             << "ddddddddddddddddd = " << ddddddddddddddddd<br>
             << "eeeeeeeeeeeeeeeee = " << eeeeeeeeeeeeeeeee;<br>
<br>
Modified:<br>
    cfe/trunk/lib/Format/TokenAnnotator.cpp<br>
    cfe/trunk/unittests/Format/FormatTest.cpp<br>
<br>
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=174545&r1=174544&r2=174545&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=174545&r1=174544&r2=174545&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)<br>
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Feb  6 15:04:05 2013<br>
@@ -784,8 +784,16 @@ unsigned TokenAnnotator::splitPenalty(co<br>
       Left.Type == TT_TemplateOpener)<br>
     return 20;<br>
<br>
-  if (Right.is(tok::lessless))<br>
+  if (Right.is(tok::lessless)) {<br>
+    if (Left.is(tok::string_literal)) {<br>
+      char LastChar =<br>
+          StringRef(Left.FormatTok.Tok.getLiteralData(),<br>
+                    Left.FormatTok.TokenLength).drop_back(1).rtrim().back();<br>
+      if (LastChar == ':' || LastChar == '=')<br>
+        return 100;<br>
+    }<br>
     return prec::Shift;<br>
+  }<br>
   if (Left.Type == TT_ConditionalExpr)<br>
     return prec::Assignment;<br>
   prec::Level Level = getPrecedence(Left);<br>
<br>
Modified: cfe/trunk/unittests/Format/FormatTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=174545&r1=174544&r2=174545&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=174545&r1=174544&r2=174545&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)<br>
+++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Feb  6 15:04:05 2013<br>
@@ -1318,6 +1318,13 @@ TEST_F(FormatTest, AlignsPipes) {<br>
                "           << \"  cccccc = \" << pkt.cccccc << \"\\n\"\n"<br>
                "           << \"  ddd = [\" << pkt.ddd << \"]\\n\"\n"<br>
                "           << \"}\";");<br>
+<br>
+  verifyFormat(<br>
+      "llvm::outs() << \"aaaaaaaaaaaaaaaaa = \" << aaaaaaaaaaaaaaaaa\n"<br>
+      "             << \"bbbbbbbbbbbbbbbbb = \" << bbbbbbbbbbbbbbbbb\n"<br>
+      "             << \"ccccccccccccccccc = \" << ccccccccccccccccc\n"<br>
+      "             << \"ddddddddddddddddd = \" << ddddddddddddddddd\n"<br>
+      "             << \"eeeeeeeeeeeeeeeee = \" << eeeeeeeeeeeeeeeee;");<br>
 }<br>
<br>
 TEST_F(FormatTest, UnderstandsEquals) {<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" class="cremed">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>