https://github.com/zeule updated 
https://github.com/llvm/llvm-project/pull/189218

>From a633769ca64e54ff22a2f8b6c87879b767d8c4b6 Mon Sep 17 00:00:00 2001
From: Eugene Shalygin <[email protected]>
Date: Fri, 27 Mar 2026 17:02:04 +0100
Subject: [PATCH 1/2] [clang-format] fix aligning inheritance lists with
 UT_AlignWithSpaces

---
 clang/lib/Format/ContinuationIndenter.cpp | 16 +++++++
 clang/unittests/Format/FormatTest.cpp     | 56 +++++++++++++++++++++--
 2 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/clang/lib/Format/ContinuationIndenter.cpp 
b/clang/lib/Format/ContinuationIndenter.cpp
index a388b74920e0b..98e131114e8f4 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -1238,6 +1238,22 @@ unsigned 
ContinuationIndenter::addTokenOnNewLine(LineState &State,
     }
   }
 
+  switch (Style.BreakInheritanceList) {
+  case FormatStyle::BILS_BeforeColon:
+  case FormatStyle::BILS_AfterComma:
+    CurrentState.IsAligned |=
+        Current.is(TT_InheritanceColon) || Previous.is(TT_InheritanceComma);
+    break;
+  case FormatStyle::BILS_BeforeComma:
+    CurrentState.IsAligned |=
+        Current.isOneOf(TT_InheritanceColon, TT_InheritanceComma);
+    break;
+  case FormatStyle::BILS_AfterColon:
+    CurrentState.IsAligned |=
+        Previous.isOneOf(TT_InheritanceColon, TT_InheritanceComma);
+    break;
+  }
+
   if ((PreviousNonComment &&
        PreviousNonComment->isOneOf(tok::comma, tok::semi) &&
        !CurrentState.AvoidBinPacking) ||
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index e0b2644249e76..79537012bebdf 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -8411,30 +8411,78 @@ TEST_F(FormatTest, 
BreakConstructorInitializersAfterColon) {
 
   // `ConstructorInitializerIndentWidth` actually applies to InheritanceList as
   // well
-  Style.BreakInheritanceList = FormatStyle::BILS_BeforeColon;
+  FormatStyle Tabbed = getLLVMStyle();
+  Tabbed.IndentWidth = 4;
+  Tabbed.TabWidth = 4;
+  Tabbed.UseTab = FormatStyle::UT_AlignWithSpaces;
+
+  Style.BreakInheritanceList =
+      Tabbed.BreakInheritanceList = FormatStyle::BILS_BeforeColon;
   verifyFormat(
       "class SomeClass\n"
       "  : public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
       "    public bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb {};",
       Style);
-  Style.BreakInheritanceList = FormatStyle::BILS_BeforeComma;
+  verifyFormat(
+      "class BeforeColonTabbed\n"
+      "    : public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+      "      protected bbbbbbbbbbbbbbbbbb,\n"
+      "      private cccccccccccccccccccccc,\n"
+      "      dddddddddd {};",
+      Tabbed);
+  Style.BreakInheritanceList =
+      Tabbed.BreakInheritanceList = FormatStyle::BILS_BeforeComma;
   verifyFormat(
       "class SomeClass\n"
       "  : public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
       "  , public bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb {};",
       Style);
-  Style.BreakInheritanceList = FormatStyle::BILS_AfterColon;
+  verifyFormat(
+      "class BeforeCommaTabbed\n"
+      "    : public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+      "    , protected bbbbbbbbb\n"
+      "    , private cccccccccc\n"
+      "    , dddddddddd {};",
+      Tabbed);
+  Style.BreakInheritanceList =
+      Tabbed.BreakInheritanceList = FormatStyle::BILS_AfterColon;
   verifyFormat(
       "class SomeClass :\n"
       "  public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
       "  public bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb {};",
       Style);
-  Style.BreakInheritanceList = FormatStyle::BILS_AfterComma;
+  verifyFormat(
+      "class AfterColonTabbed :\n"
+      "    public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+      "    protected bbbbbbbbb,\n"
+      "    private cccccccccc,\n"
+      "    dddddddddd {};",
+      Tabbed);
+  Style.BreakInheritanceList =
+      Tabbed.BreakInheritanceList = FormatStyle::BILS_AfterComma;
   verifyFormat(
       "class SomeClass\n"
       "  : public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
       "    public bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb {};",
       Style);
+  verifyFormat(
+      "class AfterCommaTabbed : public aaaaaaaaa,\n"
+      "                         protected bbbbbbbbb,\n"
+      "                         private cccccccccc,\n"
+      "                         ddddddddd {};",
+      Tabbed);
+  verifyFormat(
+      "class SomeClass\n"
+      "    : public aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
+      "      public bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 
{};",
+      Tabbed);
+  Tabbed.ColumnLimit = 42;
+  verifyFormat(
+      "struct S {\n"
+      "\tclass Foo : public aaaaaaaaa,\n"
+      "\t            private bbbbbbbbb {};\n"
+      "};",
+      Tabbed);
 }
 
 TEST_F(FormatTest, BreakConstructorInitializersAfterComma) {

>From fade97c04af2036f57c09e947e7f5b4d8014eec2 Mon Sep 17 00:00:00 2001
From: Eugene Shalygin <[email protected]>
Date: Sun, 29 Mar 2026 22:12:46 +0200
Subject: [PATCH 2/2] [clang-format] fix aligning binary operator operands

Mark operators of binary operators as aligned.
---
 clang/lib/Format/ContinuationIndenter.cpp |  4 +++-
 clang/unittests/Format/FormatTest.cpp     | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Format/ContinuationIndenter.cpp 
b/clang/lib/Format/ContinuationIndenter.cpp
index 98e131114e8f4..d4406b4e01437 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -1270,8 +1270,10 @@ unsigned 
ContinuationIndenter::addTokenOnNewLine(LineState &State,
       (PreviousNonComment && PreviousNonComment->is(tok::question))) {
     CurrentState.BreakBeforeParameter = true;
   }
-  if (Current.is(TT_BinaryOperator) && Current.CanBreakBefore)
+  if (Current.is(TT_BinaryOperator) && Current.CanBreakBefore) {
     CurrentState.BreakBeforeParameter = false;
+    CurrentState.IsAligned = true;
+  }
 
   if (!DryRun) {
     unsigned MaxEmptyLinesToKeep = Style.MaxEmptyLinesToKeep + 1;
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index 79537012bebdf..c2cd048ebb5f9 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -17285,6 +17285,27 @@ TEST_F(FormatTest, ConfigurableUseOfTab) {
                  Tab);
 }
 
+TEST_F(FormatTest, AlignWithSpaces) {
+    FormatStyle Tabbed = getLLVMStyleWithColumns(42);
+    Tabbed.UseTab = FormatStyle::UT_AlignWithSpaces;
+
+    Tabbed.IndentWidth = 4;
+    Tabbed.TabWidth = 4;
+    verifyFormat("aStreamObject << aaaaaaaaaaaaa\n"
+                 "              << bbbbbbbbb;\n",
+                 Tabbed);
+    verifyFormat("result = aaaaaaaaaaaaaaaaaaaaaaaa +\n"
+                 "         bbbbbbbbbbbbbbbbbbbb;",
+                 Tabbed);
+    verifyFormat("class C {\n"
+                 "\tvoid foo() {\n"
+                 "\t\taStreamObject << aaaaaaaaaaaaa\n"
+                 "\t\t              << bbbbbbbbb;\n"
+                 "\t}\n"
+                 "};",
+                 Tabbed);
+}
+
 TEST_F(FormatTest, ZeroTabWidth) {
   FormatStyle Tab = getLLVMStyleWithColumns(42);
   Tab.IndentWidth = 8;

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to