<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Nov 20, 2013 at 6:30 AM, Alexander Kornienko <span dir="ltr"><<a href="mailto:alexfh@google.com" target="_blank" class="cremed">alexfh@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: alexfh<br>
Date: Wed Nov 20 08:30:26 2013<br>
New Revision: 195251<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=195251&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=195251&view=rev</a><br>
Log:<br>
Support for JavaScript === and !== operators.<br>
<br>
Reviewers: klimek, djasper<br>
<br>
Reviewed By: klimek<br>
<br>
CC: cfe-commits, klimek<br>
<br>
Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D2231" target="_blank" class="cremed">http://llvm-reviews.chandlerc.com/D2231</a><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=195251&r1=195250&r2=195251&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=195251&r1=195250&r2=195251&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)<br>
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Nov 20 08:30:26 2013<br>
@@ -1363,6 +1363,10 @@ bool TokenAnnotator::spaceRequiredBefore<br>
   if (Tok.isOneOf(tok::arrowstar, tok::periodstar) ||<br>
       Tok.Previous->isOneOf(tok::arrowstar, tok::periodstar))<br>
     return false;<br>
+  // JavaScript identity operators ===, !==.<br>
+  if (Tok.Previous->isOneOf(tok::equalequal, tok::exclaimequal) &&<br>
+      Tok.is(tok::equal))<br>
+    return false;<br>
   if (!Style.SpaceBeforeAssignmentOperators &&<br>
       Tok.getPrecedence() == prec::Assignment)<br>
     return false;<br>
@@ -1452,6 +1456,9 @@ bool TokenAnnotator::canBreakBefore(cons<br>
     return false;<br>
   if (Left.is(tok::equal) && Line.Type == LT_VirtualFunctionDecl)<br>
     return false;<br>
+  // JavaScript identity operators ===, !==.<br>
+  if (Left.isOneOf(tok::equalequal, tok::exclaimequal) && Right.is(tok::equal))<br>
+    return false;<br>
   if (Left.Previous) {<br>
     if (Left.is(tok::l_paren) && Right.is(tok::l_paren) &&<br>
         Left.Previous->is(tok::kw___attribute))<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=195251&r1=195250&r2=195251&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=195251&r1=195250&r2=195251&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)<br>
+++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Nov 20 08:30:26 2013<br>
@@ -7309,5 +7309,13 @@ TEST_F(FormatTest, SpacesInAngles) {<br>
   verifyFormat("A<A<int>>();", Spaces);<br>
 }<br>
<br>
+<br>
+TEST_F(FormatTest, UnderstandsJavaScript) {<br>
+  verifyFormat("a === b;");<br>
+  verifyFormat("aaaaaaa === b;", getLLVMStyleWithColumns(10));<br></blockquote><div><br></div><div>How is this the correct format? Wouldn't we expect a break before "b"?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

+  verifyFormat("a !== b;");<br>
+  verifyFormat("aaaaaaa !== b;", getLLVMStyleWithColumns(10));<br>
+}<br>
+<br></blockquote><div><br></div><div>Also, I think these tests are not sufficient. What if the LHS of one of these operators needs to be broken over multiple lines (there is a whole lot of logic of what happens to the RHS then)?</div>
<div><br></div><div>I think we actually might need to merge the tokens.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 } // end namespace tooling<br>
 } // end namespace clang<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>