r195251 - Support for JavaScript === and !== operators.
Daniel Jasper
djasper at google.com
Wed Nov 20 07:03:37 PST 2013
On Wed, Nov 20, 2013 at 6:30 AM, Alexander Kornienko <alexfh at google.com>wrote:
> Author: alexfh
> Date: Wed Nov 20 08:30:26 2013
> New Revision: 195251
>
> URL: http://llvm.org/viewvc/llvm-project?rev=195251&view=rev
> Log:
> Support for JavaScript === and !== operators.
>
> Reviewers: klimek, djasper
>
> Reviewed By: klimek
>
> CC: cfe-commits, klimek
>
> Differential Revision: http://llvm-reviews.chandlerc.com/D2231
>
> Modified:
> cfe/trunk/lib/Format/TokenAnnotator.cpp
> cfe/trunk/unittests/Format/FormatTest.cpp
>
> Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=195251&r1=195250&r2=195251&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
> +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Nov 20 08:30:26 2013
> @@ -1363,6 +1363,10 @@ bool TokenAnnotator::spaceRequiredBefore
> if (Tok.isOneOf(tok::arrowstar, tok::periodstar) ||
> Tok.Previous->isOneOf(tok::arrowstar, tok::periodstar))
> return false;
> + // JavaScript identity operators ===, !==.
> + if (Tok.Previous->isOneOf(tok::equalequal, tok::exclaimequal) &&
> + Tok.is(tok::equal))
> + return false;
> if (!Style.SpaceBeforeAssignmentOperators &&
> Tok.getPrecedence() == prec::Assignment)
> return false;
> @@ -1452,6 +1456,9 @@ bool TokenAnnotator::canBreakBefore(cons
> return false;
> if (Left.is(tok::equal) && Line.Type == LT_VirtualFunctionDecl)
> return false;
> + // JavaScript identity operators ===, !==.
> + if (Left.isOneOf(tok::equalequal, tok::exclaimequal) &&
> Right.is(tok::equal))
> + return false;
> if (Left.Previous) {
> if (Left.is(tok::l_paren) && Right.is(tok::l_paren) &&
> Left.Previous->is(tok::kw___attribute))
>
> Modified: cfe/trunk/unittests/Format/FormatTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=195251&r1=195250&r2=195251&view=diff
>
> ==============================================================================
> --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
> +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Nov 20 08:30:26 2013
> @@ -7309,5 +7309,13 @@ TEST_F(FormatTest, SpacesInAngles) {
> verifyFormat("A<A<int>>();", Spaces);
> }
>
> +
> +TEST_F(FormatTest, UnderstandsJavaScript) {
> + verifyFormat("a === b;");
> + verifyFormat("aaaaaaa === b;", getLLVMStyleWithColumns(10));
>
How is this the correct format? Wouldn't we expect a break before "b"?
> + verifyFormat("a !== b;");
> + verifyFormat("aaaaaaa !== b;", getLLVMStyleWithColumns(10));
> +}
> +
>
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)?
I think we actually might need to merge the tokens.
} // end namespace tooling
> } // end namespace clang
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131120/aa8fb407/attachment.html>
More information about the cfe-commits
mailing list