[clang] [clang-format] modified goto bool to enum (PR #65140)

Devansh Varshney देवांश वार्ष्णेय via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 4 09:27:48 PDT 2023


https://github.com/varshneydevansh updated https://github.com/llvm/llvm-project/pull/65140:

>From be006b494c4e34463818a7f1fd30cde9282fcea1 Mon Sep 17 00:00:00 2001
From: varshneydevansh <varshney.devansh614 at gmail.com>
Date: Thu, 31 Aug 2023 17:27:58 +0530
Subject: [PATCH 1/2] [clang] modified goto bool to enum

---
 clang/docs/ClangFormatStyleOptions.rst   | 32 ++++++++++++++++--------
 clang/include/clang/Format/Format.h      | 29 +++++++++++++++------
 clang/lib/Format/Format.cpp              | 11 +++++++-
 clang/lib/Format/UnwrappedLineParser.cpp |  2 +-
 4 files changed, 53 insertions(+), 21 deletions(-)

diff --git a/clang/docs/ClangFormatStyleOptions.rst b/clang/docs/ClangFormatStyleOptions.rst
index 7847f6aa5fb1c9..05ca4a4ca78f8b 100644
--- a/clang/docs/ClangFormatStyleOptions.rst
+++ b/clang/docs/ClangFormatStyleOptions.rst
@@ -3311,22 +3311,32 @@ the configuration (without a prefix: ``Auto``).
 
 .. _IndentGotoLabels:
 
-**IndentGotoLabels** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <IndentGotoLabels>`
+**IndentGotoLabels** (``enum``) :versionbadge:`clang-format 10` :ref:`¶ <IndentGotoLabels>`
   Indent goto labels.
 
-  When ``false``, goto labels are flushed left.
+  When ``GLI_None``, goto labels are flushed left.
 
   .. code-block:: c++
 
-     true:                                  false:
-     int f() {                      vs.     int f() {
-       if (foo()) {                           if (foo()) {
-       label1:                              label1:
-         bar();                                 bar();
-       }                                      }
-     label2:                                label2:
-       return 1;                              return 1;
-     }                                      }
+    GLI_Indent:                            GLI_None:
+    int f() {                      vs.     int f() {
+      if (foo()) {                           if (foo()) {
+      label1:                              label1:
+        bar();                                 bar();
+      }                                      }
+    label2:                                label2:
+      return 1;                              return 1;
+    }                                      }
+
+    GLI_HalfIndent:
+    int f() {
+      if (foo()) {
+      label1:
+        bar();
+      }
+    label2:
+      return 1;
+    }                                    }
 
 .. _IndentPPDirectives:
 
diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h
index b641b313e32d98..754e7d6a0aa9f8 100644
--- a/clang/include/clang/Format/Format.h
+++ b/clang/include/clang/Format/Format.h
@@ -2421,9 +2421,8 @@ struct FormatStyle {
 
   /// Indent goto labels.
   ///
-  /// When ``false``, goto labels are flushed left.
   /// \code
-  ///    true:                                  false:
+  ///    GLI_Indent:                            GLI_None:
   ///    int f() {                      vs.     int f() {
   ///      if (foo()) {                           if (foo()) {
   ///      label1:                              label1:
@@ -2432,9 +2431,25 @@ struct FormatStyle {
   ///    label2:                                label2:
   ///      return 1;                              return 1;
   ///    }                                      }
+  ///
+  ///    GLI_HalfIndent:
+  ///    int f() {
+  ///      if (foo()) {
+  ///      label1:
+  ///        bar();
+  ///      }
+  ///    label2:
+  ///      return 1;
+  ///    }
   /// \endcode
   /// \version 10
-  bool IndentGotoLabels;
+  enum GotoLabelIndentation {
+    GLI_None,   // Do not indent goto labels.
+    GLI_Indent, // Indent goto labels at the same level as the surrounding code.
+    GLI_HalfIndent, // Indent goto labels at a half indent level.
+  };
+
+  GotoLabelIndentation IndentGotoLabels;
 
   /// Indents extern blocks
   enum IndentExternBlockStyle : int8_t {
@@ -4335,17 +4350,15 @@ struct FormatStyle {
           InEmptyParentheses(false), Other(false) {}
 
     SpacesInParensCustom(bool InConditionalStatements, bool InCStyleCasts,
-        bool InEmptyParentheses, bool Other)
+                         bool InEmptyParentheses, bool Other)
         : InConditionalStatements(InConditionalStatements),
-          InCStyleCasts(InCStyleCasts),
-          InEmptyParentheses(InEmptyParentheses),
+          InCStyleCasts(InCStyleCasts), InEmptyParentheses(InEmptyParentheses),
           Other(Other) {}
 
     bool operator==(const SpacesInParensCustom &R) const {
       return InConditionalStatements == R.InConditionalStatements &&
              InCStyleCasts == R.InCStyleCasts &&
-             InEmptyParentheses == R.InEmptyParentheses &&
-             Other == R.Other;
+             InEmptyParentheses == R.InEmptyParentheses && Other == R.Other;
     }
     bool operator!=(const SpacesInParensCustom &R) const {
       return !(*this == R);
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 339af30e38a7a8..e0f264755cf8a7 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1199,6 +1199,15 @@ template <> struct DocumentListTraits<std::vector<FormatStyle>> {
     return Seq[Index];
   }
 };
+
+template <> struct ScalarEnumerationTraits<FormatStyle::GotoLabelIndentation> {
+  static void enumeration(IO &IO, FormatStyle::GotoLabelIndentation &Value) {
+    IO.enumCase(Value, "None", FormatStyle::GLI_None);
+    IO.enumCase(Value, "Indent", FormatStyle::GLI_Indent);
+    IO.enumCase(Value, "HalfIndent", FormatStyle::GLI_HalfIndent);
+  }
+};
+
 } // namespace yaml
 } // namespace llvm
 
@@ -1478,7 +1487,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) {
   LLVMStyle.IndentCaseLabels = false;
   LLVMStyle.IndentCaseBlocks = false;
   LLVMStyle.IndentExternBlock = FormatStyle::IEBS_AfterExternBlock;
-  LLVMStyle.IndentGotoLabels = true;
+  LLVMStyle.IndentGotoLabels = FormatStyle::GLI_Indent;
   LLVMStyle.IndentPPDirectives = FormatStyle::PPDIS_None;
   LLVMStyle.IndentRequiresClause = true;
   LLVMStyle.IndentWidth = 2;
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 5a82b200055a87..4192bfbefd03bd 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -1647,7 +1647,7 @@ void UnwrappedLineParser::parseStructuralElement(
       nextToken();
       Line->Tokens.begin()->Tok->MustBreakBefore = true;
       FormatTok->setFinalizedType(TT_GotoLabelColon);
-      parseLabel(!Style.IndentGotoLabels);
+      parseLabel(Style.IndentGotoLabels != FormatStyle::GLI_None);
       if (HasLabel)
         *HasLabel = true;
       return;

>From 22acfbe5a1906ffe4844ec59a9f81b2cbfd5595e Mon Sep 17 00:00:00 2001
From: varshneydevansh <varshney.devansh614 at gmail.com>
Date: Mon, 4 Sep 2023 21:57:22 +0530
Subject: [PATCH 2/2] corrected based on feedback ran git clang-format

---
 clang/docs/ClangFormatStyleOptions.rst     | 10 ------
 clang/include/clang/Format/Format.h        | 39 ++++++++++------------
 clang/lib/Format/Format.cpp                |  5 ++-
 clang/unittests/Format/ConfigParseTest.cpp | 13 +++++++-
 4 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/clang/docs/ClangFormatStyleOptions.rst b/clang/docs/ClangFormatStyleOptions.rst
index 05ca4a4ca78f8b..d76af9f2fcb272 100644
--- a/clang/docs/ClangFormatStyleOptions.rst
+++ b/clang/docs/ClangFormatStyleOptions.rst
@@ -3328,16 +3328,6 @@ the configuration (without a prefix: ``Auto``).
       return 1;                              return 1;
     }                                      }
 
-    GLI_HalfIndent:
-    int f() {
-      if (foo()) {
-      label1:
-        bar();
-      }
-    label2:
-      return 1;
-    }                                    }
-
 .. _IndentPPDirectives:
 
 **IndentPPDirectives** (``PPDirectiveIndentStyle``) :versionbadge:`clang-format 6` :ref:`¶ <IndentPPDirectives>`
diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h
index 754e7d6a0aa9f8..b313f2d290ce30 100644
--- a/clang/include/clang/Format/Format.h
+++ b/clang/include/clang/Format/Format.h
@@ -2423,30 +2423,23 @@ struct FormatStyle {
   ///
   /// \code
   ///    GLI_Indent:                            GLI_None:
-  ///    int f() {                      vs.     int f() {
-  ///      if (foo()) {                           if (foo()) {
-  ///      label1:                              label1:
-  ///        bar();                                 bar();
-  ///      }                                      }
-  ///    label2:                                label2:
-  ///      return 1;                              return 1;
-  ///    }                                      }
-  ///
-  ///    GLI_HalfIndent:
-  ///    int f() {
-  ///      if (foo()) {
-  ///      label1:
-  ///        bar();
-  ///      }
-  ///    label2:
-  ///      return 1;
-  ///    }
+  /// namespace NS {                  vs.     namespace NS {
+  ///   class C {                              class C {
+  ///     void foo() {                           void foo() {
+  ///       while (x) {                            while (x) {
+  ///         if (y) {                               if (y) {
+  ///         label:                               label:
+  ///         }                                      }
+  ///       }                                       }
+  ///     }                                       } 
+  ///   }                                       } 
+  /// }                                       }
   /// \endcode
   /// \version 10
+
   enum GotoLabelIndentation {
     GLI_None,   // Do not indent goto labels.
     GLI_Indent, // Indent goto labels at the same level as the surrounding code.
-    GLI_HalfIndent, // Indent goto labels at a half indent level.
   };
 
   GotoLabelIndentation IndentGotoLabels;
@@ -4350,15 +4343,17 @@ struct FormatStyle {
           InEmptyParentheses(false), Other(false) {}
 
     SpacesInParensCustom(bool InConditionalStatements, bool InCStyleCasts,
-                         bool InEmptyParentheses, bool Other)
+        bool InEmptyParentheses, bool Other)
         : InConditionalStatements(InConditionalStatements),
-          InCStyleCasts(InCStyleCasts), InEmptyParentheses(InEmptyParentheses),
+          InCStyleCasts(InCStyleCasts), 
+          InEmptyParentheses(InEmptyParentheses),
           Other(Other) {}
 
     bool operator==(const SpacesInParensCustom &R) const {
       return InConditionalStatements == R.InConditionalStatements &&
              InCStyleCasts == R.InCStyleCasts &&
-             InEmptyParentheses == R.InEmptyParentheses && Other == R.Other;
+             InEmptyParentheses == R.InEmptyParentheses && 
+             Other == R.Other;
     }
     bool operator!=(const SpacesInParensCustom &R) const {
       return !(*this == R);
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index e0f264755cf8a7..99f7ce4bff0d3d 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1202,9 +1202,8 @@ template <> struct DocumentListTraits<std::vector<FormatStyle>> {
 
 template <> struct ScalarEnumerationTraits<FormatStyle::GotoLabelIndentation> {
   static void enumeration(IO &IO, FormatStyle::GotoLabelIndentation &Value) {
-    IO.enumCase(Value, "None", FormatStyle::GLI_None);
-    IO.enumCase(Value, "Indent", FormatStyle::GLI_Indent);
-    IO.enumCase(Value, "HalfIndent", FormatStyle::GLI_HalfIndent);
+    IO.enumCase(Value, "false", FormatStyle::GLI_None);
+    IO.enumCase(Value, "true", FormatStyle::GLI_Indent);
   }
 };
 
diff --git a/clang/unittests/Format/ConfigParseTest.cpp b/clang/unittests/Format/ConfigParseTest.cpp
index b3b6755cadee4b..a0f138506d3d2f 100644
--- a/clang/unittests/Format/ConfigParseTest.cpp
+++ b/clang/unittests/Format/ConfigParseTest.cpp
@@ -141,6 +141,16 @@ TEST(ConfigParseTest, GetsCorrectBasedOnStyle) {
   EXPECT_EQ(0, parseConfiguration(#STRUCT ":\n  " TEXT, &Style).value());      \
   EXPECT_EQ(VALUE, Style.STRUCT.FIELD) << "Unexpected value after parsing!"
 
+#define CHECK_PARSE_ENUM_FIELD(FIELD, CONFIG_NAME, ENUM_VAL)
+Style.FIELD = FormatStyle::GotoLabelIndentation::GLI_None;
+EXPECT_EQ(0, parseConfiguration(CONFIG_NAME ": true", &Style).value());
+EXPECT_EQ(ENUM_VAL, Style.FIELD);
+EXPECT_EQ(0, parseConfiguration(CONFIG_NAME ": false", &Style).value());
+EXPECT_EQ(FormatStyle::GotoLabelIndentation::GLI_None, Style.FIELD)
+
+#define CHECK_PARSE_ENUM(FIELD, ENUM_VAL)                                      \
+  CHECK_PARSE_ENUM_FIELD(FIELD, #FIELD, ENUM_VAL)
+
 TEST(ConfigParseTest, ParsesConfigurationBools) {
   FormatStyle Style = {};
   Style.Language = FormatStyle::LK_Cpp;
@@ -161,7 +171,8 @@ TEST(ConfigParseTest, ParsesConfigurationBools) {
   CHECK_PARSE_BOOL(IndentAccessModifiers);
   CHECK_PARSE_BOOL(IndentCaseLabels);
   CHECK_PARSE_BOOL(IndentCaseBlocks);
-  CHECK_PARSE_BOOL(IndentGotoLabels);
+  CHECK_PARSE_ENUM(IndentGotoLabels,
+                   FormatStyle::GotoLabelIndentation::GLI_Indent);
   CHECK_PARSE_BOOL_FIELD(IndentRequiresClause, "IndentRequires");
   CHECK_PARSE_BOOL(IndentRequiresClause);
   CHECK_PARSE_BOOL(IndentWrappedFunctionNames);



More information about the cfe-commits mailing list