]> granicus.if.org Git - clang/commitdiff
clang-format: Make formatting of member function reference qualifiers
authorDaniel Jasper <djasper@google.com>
Mon, 24 Aug 2015 14:28:08 +0000 (14:28 +0000)
committerDaniel Jasper <djasper@google.com>
Mon, 24 Aug 2015 14:28:08 +0000 (14:28 +0000)
more consistent.

Before:
  SomeType MemberFunction(const Deleted &)&&;
  SomeType MemberFunction(const Deleted &) && { ... }

After:
  SomeType MemberFunction(const Deleted &)&&;
  SomeType MemberFunction(const Deleted &)&& { ... }

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

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

index c5db18c8e0e49f29393905ba8bde5597e1ba0284..f50558c6ecfc7aa0edfac763ed88798aa498ae9e 100644 (file)
@@ -525,6 +525,8 @@ private:
 /// properly supported by Clang's lexer.
 struct AdditionalKeywords {
   AdditionalKeywords(IdentifierTable &IdentTable) {
+    kw_final = &IdentTable.get("final");
+    kw_override = &IdentTable.get("override");
     kw_in = &IdentTable.get("in");
     kw_CF_ENUM = &IdentTable.get("CF_ENUM");
     kw_CF_OPTIONS = &IdentTable.get("CF_OPTIONS");
@@ -538,7 +540,6 @@ struct AdditionalKeywords {
 
     kw_abstract = &IdentTable.get("abstract");
     kw_extends = &IdentTable.get("extends");
-    kw_final = &IdentTable.get("final");
     kw_implements = &IdentTable.get("implements");
     kw_instanceof = &IdentTable.get("instanceof");
     kw_interface = &IdentTable.get("interface");
@@ -562,6 +563,8 @@ struct AdditionalKeywords {
   }
 
   // Context sensitive keywords.
+  IdentifierInfo *kw_final;
+  IdentifierInfo *kw_override;
   IdentifierInfo *kw_in;
   IdentifierInfo *kw_CF_ENUM;
   IdentifierInfo *kw_CF_OPTIONS;
@@ -578,7 +581,6 @@ struct AdditionalKeywords {
   // Java keywords.
   IdentifierInfo *kw_abstract;
   IdentifierInfo *kw_extends;
-  IdentifierInfo *kw_final;
   IdentifierInfo *kw_implements;
   IdentifierInfo *kw_instanceof;
   IdentifierInfo *kw_interface;
index 381433484deb56518d060c2fc06d7ae168692648..50e04310b636851ce18b97827144e61c57d8aa68 100644 (file)
@@ -1139,9 +1139,11 @@ private:
       return TT_UnaryOperator;
 
     const FormatToken *NextToken = Tok.getNextNonComment();
-    if (!NextToken || NextToken->is(tok::arrow) ||
+    if (!NextToken ||
+        NextToken->isOneOf(tok::arrow, Keywords.kw_final,
+                           Keywords.kw_override) ||
         (NextToken->is(tok::l_brace) && !NextToken->getNextNonComment()))
-      return TT_Unknown;
+      return TT_PointerOrReference;
 
     if (PrevToken->is(tok::coloncolon))
       return TT_PointerOrReference;
@@ -1855,7 +1857,9 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
         !Line.IsMultiVariableDeclStmt)))
     return true;
   if (Left.is(TT_PointerOrReference))
-    return Right.Tok.isLiteral() || Right.is(TT_BlockComment) ||
+    return Right.Tok.isLiteral() ||
+           Right.isOneOf(TT_BlockComment, Keywords.kw_final,
+                         Keywords.kw_override) ||
            (Right.is(tok::l_brace) && Right.BlockKind == BK_Block) ||
            (!Right.isOneOf(TT_PointerOrReference, TT_ArraySubscriptLSquare,
                            tok::l_paren) &&
index 0f4e46436b47876948beae39653175b86620e879..3751697392916753e3b71f1637143614ca35b822 100644 (file)
@@ -5326,6 +5326,9 @@ TEST_F(FormatTest, UnderstandsFunctionRefQualification) {
   verifyFormat("Deleted &operator=(const Deleted &)&&;");
   verifyFormat("SomeType MemberFunction(const Deleted &)&;");
   verifyFormat("SomeType MemberFunction(const Deleted &)&&;");
+  verifyFormat("SomeType MemberFunction(const Deleted &)&& {}");
+  verifyFormat("SomeType MemberFunction(const Deleted &)&& final {}");
+  verifyFormat("SomeType MemberFunction(const Deleted &)&& override {}");
 
   verifyGoogleFormat("Deleted& operator=(const Deleted&)& = default;");
   verifyGoogleFormat("SomeType MemberFunction(const Deleted&)& = delete;");
@@ -5583,11 +5586,11 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {
 
   // Member function reference qualifiers aren't binary operators.
   verifyFormat("string // break\n"
-               "operator()() & {}");
+               "operator()()& {}");
   verifyFormat("string // break\n"
-               "operator()() && {}");
+               "operator()()&& {}");
   verifyGoogleFormat("template <typename T>\n"
-                     "auto x() & -> int {}");
+                     "auto x()& -> int {}");
 }
 
 TEST_F(FormatTest, UnderstandsAttributes) {