]> granicus.if.org Git - clang/commitdiff
clang-format: Improve template parameter detection.
authorDaniel Jasper <djasper@google.com>
Thu, 8 Jan 2015 08:48:21 +0000 (08:48 +0000)
committerDaniel Jasper <djasper@google.com>
Thu, 8 Jan 2015 08:48:21 +0000 (08:48 +0000)
Before:
  struct A < std::enable_if<sizeof(T2) <sizeof(int32)>::type>;

After:
  struct A<std::enable_if<sizeof(T2) < sizeof(int32)>::type>;

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

lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTest.cpp

index 8966ab2484b03dfc1aa0c3970bedfb592070fe2d..23c1fcd2129232c94937678312132dd573494731 100644 (file)
@@ -470,9 +470,12 @@ private:
         return false;
       break;
     case tok::less:
-      if ((!Tok->Previous || !Tok->Previous->Tok.isLiteral()) && parseAngle())
+      if ((!Tok->Previous ||
+           (!Tok->Previous->Tok.isLiteral() &&
+            !(Tok->Previous->is(tok::r_paren) && Contexts.size() > 1))) &&
+          parseAngle()) {
         Tok->Type = TT_TemplateOpener;
-      else {
+      else {
         Tok->Type = TT_BinaryOperator;
         CurrentToken = Tok;
         next();
index fc49bde7140c6e3f909957533659bd83940f228c..1ecaf090e2ed6a753f4182e8bcaa782565c6adbd 100644 (file)
@@ -4939,6 +4939,7 @@ TEST_F(FormatTest, UnderstandsTemplateParameters) {
 
   verifyFormat("f<int>();");
   verifyFormat("template <typename T> void f() {}");
+  verifyFormat("struct A<std::enable_if<sizeof(T2) < sizeof(int32)>::type>;");
 
   // Not template parameters.
   verifyFormat("return a < b && c > d;");