]> granicus.if.org Git - clang/commitdiff
clang-format: [JS] Let fat arrows have 'Assignment' precedence.
authorDaniel Jasper <djasper@google.com>
Fri, 5 Jun 2015 08:25:37 +0000 (08:25 +0000)
committerDaniel Jasper <djasper@google.com>
Fri, 5 Jun 2015 08:25:37 +0000 (08:25 +0000)
This is a more correct representation than using "Equality" introduced
in r238942 which was a quick fix to solve an actual regression.

According to the typescript spec, arrows behave like "low-precedence"
assignments.

Before:
  var a = a.aaaaaaa((a: a) => aaaaaaaaaaaaaaaaaaaaa(bbbbbbbbb) &&
                    aaaaaaaaaaaaaaaaaaaaa(bbbbbbb));
After:
  var a = a.aaaaaaa((a: a) => aaaaaaaaaaaaaaaaaaaaa(bbbbbbbbb) &&
                              aaaaaaaaaaaaaaaaaaaaa(bbbbbbb));

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239137 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTestJS.cpp

index 23ba2e870d1b26ea9cbccd9520b0c231849bda00..a717a96eab1f5d941ec33f070daae1c93ef05caf 100644 (file)
@@ -1326,7 +1326,7 @@ private:
       if (Current->is(TT_LambdaArrow))
         return prec::Comma;
       if (Current->is(TT_JsFatArrow))
-        return prec::Equality;
+        return prec::Assignment;
       if (Current->isOneOf(tok::semi, TT_InlineASMColon, TT_SelectorName,
                            TT_JsComputedPropertyName) ||
           (Current->is(tok::comment) && NextNonComment &&
index da4f686afb8e942ab097d70ced5153316d071250..efa845cd90befbf7554ccfd21a66d454c696c099 100644 (file)
@@ -488,8 +488,15 @@ TEST_F(FormatTestJS, ArrowFunctions) {
                "  aaaaaaaaaaaaaaaaaaaaaaaaaaaa:\n"
                "      (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
                "       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) =>\n"
-               "              aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+               "          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
                "};");
+  verifyFormat(
+      "var a = a.aaaaaaa((a: a) => aaaaaaaaaaaaaaaaaaaaa(bbbbbbbbb) &&\n"
+      "                            aaaaaaaaaaaaaaaaaaaaa(bbbbbbb));");
+  verifyFormat(
+      "var a = a.aaaaaaa((a: a) => aaaaaaaaaaaaaaaaaaaaa(bbbbbbbbb) ?\n"
+      "                                aaaaaaaaaaaaaaaaaaaaa(bbbbbbb) :\n"
+      "                                aaaaaaaaaaaaaaaaaaaaa(bbbbbbb));");
 
   // FIXME: This is bad, we should be wrapping before "() => {".
   verifyFormat("someFunction(() => {\n"