[clang] 0468fa0 - [clang-format] Don't align ctors and dtors with other functions (#67618)

via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 29 02:09:40 PDT 2023


Author: Owen Pan
Date: 2023-09-29T02:09:36-07:00
New Revision: 0468fa07f87fe3b33e2bb56c9012ecf3de6a6a87

URL: https://github.com/llvm/llvm-project/commit/0468fa07f87fe3b33e2bb56c9012ecf3de6a6a87
DIFF: https://github.com/llvm/llvm-project/commit/0468fa07f87fe3b33e2bb56c9012ecf3de6a6a87.diff

LOG: [clang-format] Don't align ctors and dtors with other functions (#67618)

Fixed #67604.

Added: 
    

Modified: 
    clang/lib/Format/WhitespaceManager.cpp
    clang/unittests/Format/FormatTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp
index 1790a9df42b5d14..762729d1c4166a5 100644
--- a/clang/lib/Format/WhitespaceManager.cpp
+++ b/clang/lib/Format/WhitespaceManager.cpp
@@ -974,7 +974,11 @@ void WhitespaceManager::alignConsecutiveDeclarations() {
   AlignTokens(
       Style,
       [](Change const &C) {
-        if (C.Tok->isOneOf(TT_FunctionDeclarationName, TT_FunctionTypeLParen))
+        if (C.Tok->is(TT_FunctionDeclarationName) && C.Tok->Previous &&
+            C.Tok->Previous->isNot(tok::tilde)) {
+          return true;
+        }
+        if (C.Tok->is(TT_FunctionTypeLParen))
           return true;
         if (C.Tok->isNot(TT_StartOfName))
           return false;

diff  --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 6c67c4253254da1..0403de8a9a65594 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -18677,6 +18677,12 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
   verifyFormat("int    a(int x);\n"
                "double b();",
                Alignment);
+  verifyFormat("struct Test {\n"
+               "  Test(const Test &) = default;\n"
+               "  ~Test() = default;\n"
+               "  Test &operator=(const Test &) = default;\n"
+               "};",
+               Alignment);
   unsigned OldColumnLimit = Alignment.ColumnLimit;
   // We need to set ColumnLimit to zero, in order to stress nested alignments,
   // otherwise the function parameters will be re-flowed onto a single line.
@@ -18713,6 +18719,12 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
                "double b();",
                Alignment);
   Alignment.AlignConsecutiveAssignments.Enabled = true;
+  verifyFormat("struct Test {\n"
+               "  Test(const Test &)            = default;\n"
+               "  ~Test()                       = default;\n"
+               "  Test &operator=(const Test &) = default;\n"
+               "};",
+               Alignment);
   // Ensure recursive alignment is broken by function braces, so that the
   // "a = 1" does not align with subsequent assignments inside the function
   // body.


        


More information about the cfe-commits mailing list