Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- Format.h - Format C++ code -----------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. ///
  9. /// \file
  10. /// Various functions to configurably format source code.
  11. ///
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CLANG_FORMAT_FORMAT_H
  15. #define LLVM_CLANG_FORMAT_FORMAT_H
  16.  
  17. #include "clang/Basic/LangOptions.h"
  18. #include "clang/Tooling/Core/Replacement.h"
  19. #include "clang/Tooling/Inclusions/IncludeStyle.h"
  20. #include "llvm/ADT/ArrayRef.h"
  21. #include "llvm/Support/Regex.h"
  22. #include "llvm/Support/SourceMgr.h"
  23. #include <optional>
  24. #include <system_error>
  25.  
  26. namespace llvm {
  27. namespace vfs {
  28. class FileSystem;
  29. }
  30. } // namespace llvm
  31.  
  32. namespace clang {
  33. namespace format {
  34.  
  35. enum class ParseError {
  36.   Success = 0,
  37.   Error,
  38.   Unsuitable,
  39.   BinPackTrailingCommaConflict,
  40.   InvalidQualifierSpecified,
  41.   DuplicateQualifierSpecified,
  42.   MissingQualifierType,
  43.   MissingQualifierOrder
  44. };
  45. class ParseErrorCategory final : public std::error_category {
  46. public:
  47.   const char *name() const noexcept override;
  48.   std::string message(int EV) const override;
  49. };
  50. const std::error_category &getParseCategory();
  51. std::error_code make_error_code(ParseError e);
  52.  
  53. /// The ``FormatStyle`` is used to configure the formatting to follow
  54. /// specific guidelines.
  55. struct FormatStyle {
  56.   // If the BasedOn: was InheritParentConfig and this style needs the file from
  57.   // the parent directories. It is not part of the actual style for formatting.
  58.   // Thus the // instead of ///.
  59.   bool InheritsParentConfig;
  60.  
  61.   /// The extra indent or outdent of access modifiers, e.g. ``public:``.
  62.   /// \version 3.3
  63.   int AccessModifierOffset;
  64.  
  65.   /// Different styles for aligning after open brackets.
  66.   enum BracketAlignmentStyle : int8_t {
  67.     /// Align parameters on the open bracket, e.g.:
  68.     /// \code
  69.     ///   someLongFunction(argument1,
  70.     ///                    argument2);
  71.     /// \endcode
  72.     BAS_Align,
  73.     /// Don't align, instead use ``ContinuationIndentWidth``, e.g.:
  74.     /// \code
  75.     ///   someLongFunction(argument1,
  76.     ///       argument2);
  77.     /// \endcode
  78.     BAS_DontAlign,
  79.     /// Always break after an open bracket, if the parameters don't fit
  80.     /// on a single line, e.g.:
  81.     /// \code
  82.     ///   someLongFunction(
  83.     ///       argument1, argument2);
  84.     /// \endcode
  85.     BAS_AlwaysBreak,
  86.     /// Always break after an open bracket, if the parameters don't fit
  87.     /// on a single line. Closing brackets will be placed on a new line.
  88.     /// E.g.:
  89.     /// \code
  90.     ///   someLongFunction(
  91.     ///       argument1, argument2
  92.     ///   )
  93.     /// \endcode
  94.     ///
  95.     /// \warning
  96.     ///  Note: This currently only applies to parentheses.
  97.     /// \endwarning
  98.     BAS_BlockIndent,
  99.   };
  100.  
  101.   /// If ``true``, horizontally aligns arguments after an open bracket.
  102.   ///
  103.   /// This applies to round brackets (parentheses), angle brackets and square
  104.   /// brackets.
  105.   /// \version 3.8
  106.   BracketAlignmentStyle AlignAfterOpenBracket;
  107.  
  108.   /// Different style for aligning array initializers.
  109.   enum ArrayInitializerAlignmentStyle : int8_t {
  110.     /// Align array column and left justify the columns e.g.:
  111.     /// \code
  112.     ///   struct test demo[] =
  113.     ///   {
  114.     ///       {56, 23,    "hello"},
  115.     ///       {-1, 93463, "world"},
  116.     ///       {7,  5,     "!!"   }
  117.     ///   };
  118.     /// \endcode
  119.     AIAS_Left,
  120.     /// Align array column and right justify the columns e.g.:
  121.     /// \code
  122.     ///   struct test demo[] =
  123.     ///   {
  124.     ///       {56,    23, "hello"},
  125.     ///       {-1, 93463, "world"},
  126.     ///       { 7,     5,    "!!"}
  127.     ///   };
  128.     /// \endcode
  129.     AIAS_Right,
  130.     /// Don't align array initializer columns.
  131.     AIAS_None
  132.   };
  133.   /// if not ``None``, when using initialization for an array of structs
  134.   /// aligns the fields into columns.
  135.   ///
  136.   /// NOTE: As of clang-format 15 this option only applied to arrays with equal
  137.   /// number of columns per row.
  138.   ///
  139.   /// \version 13
  140.   ArrayInitializerAlignmentStyle AlignArrayOfStructures;
  141.  
  142.   /// Alignment options.
  143.   ///
  144.   /// They can also be read as a whole for compatibility. The choices are:
  145.   /// - None
  146.   /// - Consecutive
  147.   /// - AcrossEmptyLines
  148.   /// - AcrossComments
  149.   /// - AcrossEmptyLinesAndComments
  150.   ///
  151.   /// For example, to align across empty lines and not across comments, either
  152.   /// of these work.
  153.   /// \code
  154.   ///   AlignConsecutiveMacros: AcrossEmptyLines
  155.   ///
  156.   ///   AlignConsecutiveMacros:
  157.   ///     Enabled: true
  158.   ///     AcrossEmptyLines: true
  159.   ///     AcrossComments: false
  160.   /// \endcode
  161.   struct AlignConsecutiveStyle {
  162.     /// Whether aligning is enabled.
  163.     /// \code
  164.     ///   #define SHORT_NAME       42
  165.     ///   #define LONGER_NAME      0x007f
  166.     ///   #define EVEN_LONGER_NAME (2)
  167.     ///   #define foo(x)           (x * x)
  168.     ///   #define bar(y, z)        (y + z)
  169.     ///
  170.     ///   int a            = 1;
  171.     ///   int somelongname = 2;
  172.     ///   double c         = 3;
  173.     ///
  174.     ///   int aaaa : 1;
  175.     ///   int b    : 12;
  176.     ///   int ccc  : 8;
  177.     ///
  178.     ///   int         aaaa = 12;
  179.     ///   float       b = 23;
  180.     ///   std::string ccc;
  181.     /// \endcode
  182.     bool Enabled;
  183.     /// Whether to align across empty lines.
  184.     /// \code
  185.     ///   true:
  186.     ///   int a            = 1;
  187.     ///   int somelongname = 2;
  188.     ///   double c         = 3;
  189.     ///
  190.     ///   int d            = 3;
  191.     ///
  192.     ///   false:
  193.     ///   int a            = 1;
  194.     ///   int somelongname = 2;
  195.     ///   double c         = 3;
  196.     ///
  197.     ///   int d = 3;
  198.     /// \endcode
  199.     bool AcrossEmptyLines;
  200.     /// Whether to align across comments.
  201.     /// \code
  202.     ///   true:
  203.     ///   int d    = 3;
  204.     ///   /* A comment. */
  205.     ///   double e = 4;
  206.     ///
  207.     ///   false:
  208.     ///   int d = 3;
  209.     ///   /* A comment. */
  210.     ///   double e = 4;
  211.     /// \endcode
  212.     bool AcrossComments;
  213.     /// Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
  214.     /// like ``+=`` are aligned along with ``=``.
  215.     /// \code
  216.     ///   true:
  217.     ///   a   &= 2;
  218.     ///   bbb  = 2;
  219.     ///
  220.     ///   false:
  221.     ///   a &= 2;
  222.     ///   bbb = 2;
  223.     /// \endcode
  224.     bool AlignCompound;
  225.     /// Only for ``AlignConsecutiveAssignments``.  Whether short assignment
  226.     /// operators are left-padded to the same length as long ones in order to
  227.     /// put all assignment operators to the right of the left hand side.
  228.     /// \code
  229.     ///   true:
  230.     ///   a   >>= 2;
  231.     ///   bbb   = 2;
  232.     ///
  233.     ///   a     = 2;
  234.     ///   bbb >>= 2;
  235.     ///
  236.     ///   false:
  237.     ///   a >>= 2;
  238.     ///   bbb = 2;
  239.     ///
  240.     ///   a     = 2;
  241.     ///   bbb >>= 2;
  242.     /// \endcode
  243.     bool PadOperators;
  244.     bool operator==(const AlignConsecutiveStyle &R) const {
  245.       return Enabled == R.Enabled && AcrossEmptyLines == R.AcrossEmptyLines &&
  246.              AcrossComments == R.AcrossComments &&
  247.              AlignCompound == R.AlignCompound && PadOperators == R.PadOperators;
  248.     }
  249.     bool operator!=(const AlignConsecutiveStyle &R) const {
  250.       return !(*this == R);
  251.     }
  252.   };
  253.  
  254.   /// Style of aligning consecutive macro definitions.
  255.   ///
  256.   /// ``Consecutive`` will result in formattings like:
  257.   /// \code
  258.   ///   #define SHORT_NAME       42
  259.   ///   #define LONGER_NAME      0x007f
  260.   ///   #define EVEN_LONGER_NAME (2)
  261.   ///   #define foo(x)           (x * x)
  262.   ///   #define bar(y, z)        (y + z)
  263.   /// \endcode
  264.   /// \version 9
  265.   AlignConsecutiveStyle AlignConsecutiveMacros;
  266.   /// Style of aligning consecutive assignments.
  267.   ///
  268.   /// ``Consecutive`` will result in formattings like:
  269.   /// \code
  270.   ///   int a            = 1;
  271.   ///   int somelongname = 2;
  272.   ///   double c         = 3;
  273.   /// \endcode
  274.   /// \version 3.8
  275.   AlignConsecutiveStyle AlignConsecutiveAssignments;
  276.   /// Style of aligning consecutive bit fields.
  277.   ///
  278.   /// ``Consecutive`` will align the bitfield separators of consecutive lines.
  279.   /// This will result in formattings like:
  280.   /// \code
  281.   ///   int aaaa : 1;
  282.   ///   int b    : 12;
  283.   ///   int ccc  : 8;
  284.   /// \endcode
  285.   /// \version 11
  286.   AlignConsecutiveStyle AlignConsecutiveBitFields;
  287.   /// Style of aligning consecutive declarations.
  288.   ///
  289.   /// ``Consecutive`` will align the declaration names of consecutive lines.
  290.   /// This will result in formattings like:
  291.   /// \code
  292.   ///   int         aaaa = 12;
  293.   ///   float       b = 23;
  294.   ///   std::string ccc;
  295.   /// \endcode
  296.   /// \version 3.8
  297.   AlignConsecutiveStyle AlignConsecutiveDeclarations;
  298.  
  299.   /// Different styles for aligning escaped newlines.
  300.   enum EscapedNewlineAlignmentStyle : int8_t {
  301.     /// Don't align escaped newlines.
  302.     /// \code
  303.     ///   #define A \
  304.     ///     int aaaa; \
  305.     ///     int b; \
  306.     ///     int dddddddddd;
  307.     /// \endcode
  308.     ENAS_DontAlign,
  309.     /// Align escaped newlines as far left as possible.
  310.     /// \code
  311.     ///   true:
  312.     ///   #define A   \
  313.     ///     int aaaa; \
  314.     ///     int b;    \
  315.     ///     int dddddddddd;
  316.     ///
  317.     ///   false:
  318.     /// \endcode
  319.     ENAS_Left,
  320.     /// Align escaped newlines in the right-most column.
  321.     /// \code
  322.     ///   #define A                                                                      \
  323.     ///     int aaaa;                                                                    \
  324.     ///     int b;                                                                       \
  325.     ///     int dddddddddd;
  326.     /// \endcode
  327.     ENAS_Right,
  328.   };
  329.  
  330.   /// Options for aligning backslashes in escaped newlines.
  331.   /// \version 5
  332.   EscapedNewlineAlignmentStyle AlignEscapedNewlines;
  333.  
  334.   /// Different styles for aligning operands.
  335.   enum OperandAlignmentStyle : int8_t {
  336.     /// Do not align operands of binary and ternary expressions.
  337.     /// The wrapped lines are indented ``ContinuationIndentWidth`` spaces from
  338.     /// the start of the line.
  339.     OAS_DontAlign,
  340.     /// Horizontally align operands of binary and ternary expressions.
  341.     ///
  342.     /// Specifically, this aligns operands of a single expression that needs
  343.     /// to be split over multiple lines, e.g.:
  344.     /// \code
  345.     ///   int aaa = bbbbbbbbbbbbbbb +
  346.     ///             ccccccccccccccc;
  347.     /// \endcode
  348.     ///
  349.     /// When ``BreakBeforeBinaryOperators`` is set, the wrapped operator is
  350.     /// aligned with the operand on the first line.
  351.     /// \code
  352.     ///   int aaa = bbbbbbbbbbbbbbb
  353.     ///             + ccccccccccccccc;
  354.     /// \endcode
  355.     OAS_Align,
  356.     /// Horizontally align operands of binary and ternary expressions.
  357.     ///
  358.     /// This is similar to ``AO_Align``, except when
  359.     /// ``BreakBeforeBinaryOperators`` is set, the operator is un-indented so
  360.     /// that the wrapped operand is aligned with the operand on the first line.
  361.     /// \code
  362.     ///   int aaa = bbbbbbbbbbbbbbb
  363.     ///           + ccccccccccccccc;
  364.     /// \endcode
  365.     OAS_AlignAfterOperator,
  366.   };
  367.  
  368.   /// If ``true``, horizontally align operands of binary and ternary
  369.   /// expressions.
  370.   /// \version 3.5
  371.   OperandAlignmentStyle AlignOperands;
  372.  
  373.   /// Enums for AlignTrailingComments
  374.   enum TrailingCommentsAlignmentKinds : int8_t {
  375.     /// Leave trailing comments as they are.
  376.     /// \code
  377.     ///   int a;    // comment
  378.     ///   int ab;       // comment
  379.     ///
  380.     ///   int abc;  // comment
  381.     ///   int abcd;     // comment
  382.     /// \endcode
  383.     TCAS_Leave,
  384.     /// Align trailing comments.
  385.     /// \code
  386.     ///   int a;  // comment
  387.     ///   int ab; // comment
  388.     ///
  389.     ///   int abc;  // comment
  390.     ///   int abcd; // comment
  391.     /// \endcode
  392.     TCAS_Always,
  393.     /// Don't align trailing comments but other formatter applies.
  394.     /// \code
  395.     ///   int a; // comment
  396.     ///   int ab; // comment
  397.     ///
  398.     ///   int abc; // comment
  399.     ///   int abcd; // comment
  400.     /// \endcode
  401.     TCAS_Never,
  402.   };
  403.  
  404.   /// Alignment options
  405.   struct TrailingCommentsAlignmentStyle {
  406.     /// Specifies the way to align trailing comments.
  407.     TrailingCommentsAlignmentKinds Kind;
  408.     /// How many empty lines to apply alignment.
  409.     /// When both ``MaxEmptyLinesToKeep`` and ``OverEmptyLines`` are set to 2,
  410.     /// it formats like below.
  411.     /// \code
  412.     ///   int a;      // all these
  413.     ///
  414.     ///   int ab;     // comments are
  415.     ///
  416.     ///
  417.     ///   int abcdef; // aligned
  418.     /// \endcode
  419.     ///
  420.     /// When ``MaxEmptyLinesToKeep`` is set to 2 and ``OverEmptyLines`` is set
  421.     /// to 1, it formats like below.
  422.     /// \code
  423.     ///   int a;  // these are
  424.     ///
  425.     ///   int ab; // aligned
  426.     ///
  427.     ///
  428.     ///   int abcdef; // but this isn't
  429.     /// \endcode
  430.     unsigned OverEmptyLines;
  431.  
  432.     bool operator==(const TrailingCommentsAlignmentStyle &R) const {
  433.       return Kind == R.Kind && OverEmptyLines == R.OverEmptyLines;
  434.     }
  435.     bool operator!=(const TrailingCommentsAlignmentStyle &R) const {
  436.       return !(*this == R);
  437.     }
  438.   };
  439.  
  440.   /// Control of trailing comments.
  441.   ///
  442.   /// NOTE: As of clang-format 16 this option is not a bool but can be set
  443.   /// to the options. Conventional bool options still can be parsed as before.
  444.   ///
  445.   /// \code{.yaml}
  446.   ///   # Example of usage:
  447.   ///   AlignTrailingComments:
  448.   ///     Kind: Always
  449.   ///     OverEmptyLines: 2
  450.   /// \endcode
  451.   /// \version 3.7
  452.   TrailingCommentsAlignmentStyle AlignTrailingComments;
  453.  
  454.   /// \brief If a function call or braced initializer list doesn't fit on a
  455.   /// line, allow putting all arguments onto the next line, even if
  456.   /// ``BinPackArguments`` is ``false``.
  457.   /// \code
  458.   ///   true:
  459.   ///   callFunction(
  460.   ///       a, b, c, d);
  461.   ///
  462.   ///   false:
  463.   ///   callFunction(a,
  464.   ///                b,
  465.   ///                c,
  466.   ///                d);
  467.   /// \endcode
  468.   /// \version 9
  469.   bool AllowAllArgumentsOnNextLine;
  470.  
  471.   /// This option is **deprecated**. See ``NextLine`` of
  472.   /// ``PackConstructorInitializers``.
  473.   /// \version 9
  474.   // bool AllowAllConstructorInitializersOnNextLine;
  475.  
  476.   /// If the function declaration doesn't fit on a line,
  477.   /// allow putting all parameters of a function declaration onto
  478.   /// the next line even if ``BinPackParameters`` is ``false``.
  479.   /// \code
  480.   ///   true:
  481.   ///   void myFunction(
  482.   ///       int a, int b, int c, int d, int e);
  483.   ///
  484.   ///   false:
  485.   ///   void myFunction(int a,
  486.   ///                   int b,
  487.   ///                   int c,
  488.   ///                   int d,
  489.   ///                   int e);
  490.   /// \endcode
  491.   /// \version 3.3
  492.   bool AllowAllParametersOfDeclarationOnNextLine;
  493.  
  494.   /// Different styles for merging short blocks containing at most one
  495.   /// statement.
  496.   enum ShortBlockStyle : int8_t {
  497.     /// Never merge blocks into a single line.
  498.     /// \code
  499.     ///   while (true) {
  500.     ///   }
  501.     ///   while (true) {
  502.     ///     continue;
  503.     ///   }
  504.     /// \endcode
  505.     SBS_Never,
  506.     /// Only merge empty blocks.
  507.     /// \code
  508.     ///   while (true) {}
  509.     ///   while (true) {
  510.     ///     continue;
  511.     ///   }
  512.     /// \endcode
  513.     SBS_Empty,
  514.     /// Always merge short blocks into a single line.
  515.     /// \code
  516.     ///   while (true) {}
  517.     ///   while (true) { continue; }
  518.     /// \endcode
  519.     SBS_Always,
  520.   };
  521.  
  522.   /// Dependent on the value, ``while (true) { continue; }`` can be put on a
  523.   /// single line.
  524.   /// \version 3.5
  525.   ShortBlockStyle AllowShortBlocksOnASingleLine;
  526.  
  527.   /// If ``true``, short case labels will be contracted to a single line.
  528.   /// \code
  529.   ///   true:                                   false:
  530.   ///   switch (a) {                    vs.     switch (a) {
  531.   ///   case 1: x = 1; break;                   case 1:
  532.   ///   case 2: return;                           x = 1;
  533.   ///   }                                         break;
  534.   ///                                           case 2:
  535.   ///                                             return;
  536.   ///                                           }
  537.   /// \endcode
  538.   /// \version 3.6
  539.   bool AllowShortCaseLabelsOnASingleLine;
  540.  
  541.   /// Allow short enums on a single line.
  542.   /// \code
  543.   ///   true:
  544.   ///   enum { A, B } myEnum;
  545.   ///
  546.   ///   false:
  547.   ///   enum {
  548.   ///     A,
  549.   ///     B
  550.   ///   } myEnum;
  551.   /// \endcode
  552.   /// \version 11
  553.   bool AllowShortEnumsOnASingleLine;
  554.  
  555.   /// Different styles for merging short functions containing at most one
  556.   /// statement.
  557.   enum ShortFunctionStyle : int8_t {
  558.     /// Never merge functions into a single line.
  559.     SFS_None,
  560.     /// Only merge functions defined inside a class. Same as "inline",
  561.     /// except it does not implies "empty": i.e. top level empty functions
  562.     /// are not merged either.
  563.     /// \code
  564.     ///   class Foo {
  565.     ///     void f() { foo(); }
  566.     ///   };
  567.     ///   void f() {
  568.     ///     foo();
  569.     ///   }
  570.     ///   void f() {
  571.     ///   }
  572.     /// \endcode
  573.     SFS_InlineOnly,
  574.     /// Only merge empty functions.
  575.     /// \code
  576.     ///   void f() {}
  577.     ///   void f2() {
  578.     ///     bar2();
  579.     ///   }
  580.     /// \endcode
  581.     SFS_Empty,
  582.     /// Only merge functions defined inside a class. Implies "empty".
  583.     /// \code
  584.     ///   class Foo {
  585.     ///     void f() { foo(); }
  586.     ///   };
  587.     ///   void f() {
  588.     ///     foo();
  589.     ///   }
  590.     ///   void f() {}
  591.     /// \endcode
  592.     SFS_Inline,
  593.     /// Merge all functions fitting on a single line.
  594.     /// \code
  595.     ///   class Foo {
  596.     ///     void f() { foo(); }
  597.     ///   };
  598.     ///   void f() { bar(); }
  599.     /// \endcode
  600.     SFS_All,
  601.   };
  602.  
  603.   /// Dependent on the value, ``int f() { return 0; }`` can be put on a
  604.   /// single line.
  605.   /// \version 3.5
  606.   ShortFunctionStyle AllowShortFunctionsOnASingleLine;
  607.  
  608.   /// Different styles for handling short if statements.
  609.   enum ShortIfStyle : int8_t {
  610.     /// Never put short ifs on the same line.
  611.     /// \code
  612.     ///   if (a)
  613.     ///     return;
  614.     ///
  615.     ///   if (b)
  616.     ///     return;
  617.     ///   else
  618.     ///     return;
  619.     ///
  620.     ///   if (c)
  621.     ///     return;
  622.     ///   else {
  623.     ///     return;
  624.     ///   }
  625.     /// \endcode
  626.     SIS_Never,
  627.     /// Put short ifs on the same line only if there is no else statement.
  628.     /// \code
  629.     ///   if (a) return;
  630.     ///
  631.     ///   if (b)
  632.     ///     return;
  633.     ///   else
  634.     ///     return;
  635.     ///
  636.     ///   if (c)
  637.     ///     return;
  638.     ///   else {
  639.     ///     return;
  640.     ///   }
  641.     /// \endcode
  642.     SIS_WithoutElse,
  643.     /// Put short ifs, but not else ifs nor else statements, on the same line.
  644.     /// \code
  645.     ///   if (a) return;
  646.     ///
  647.     ///   if (b) return;
  648.     ///   else if (b)
  649.     ///     return;
  650.     ///   else
  651.     ///     return;
  652.     ///
  653.     ///   if (c) return;
  654.     ///   else {
  655.     ///     return;
  656.     ///   }
  657.     /// \endcode
  658.     SIS_OnlyFirstIf,
  659.     /// Always put short ifs, else ifs and else statements on the same
  660.     /// line.
  661.     /// \code
  662.     ///   if (a) return;
  663.     ///
  664.     ///   if (b) return;
  665.     ///   else return;
  666.     ///
  667.     ///   if (c) return;
  668.     ///   else {
  669.     ///     return;
  670.     ///   }
  671.     /// \endcode
  672.     SIS_AllIfsAndElse,
  673.   };
  674.  
  675.   /// Dependent on the value, ``if (a) return;`` can be put on a single line.
  676.   /// \version 3.3
  677.   ShortIfStyle AllowShortIfStatementsOnASingleLine;
  678.  
  679.   /// Different styles for merging short lambdas containing at most one
  680.   /// statement.
  681.   enum ShortLambdaStyle : int8_t {
  682.     /// Never merge lambdas into a single line.
  683.     SLS_None,
  684.     /// Only merge empty lambdas.
  685.     /// \code
  686.     ///   auto lambda = [](int a) {};
  687.     ///   auto lambda2 = [](int a) {
  688.     ///       return a;
  689.     ///   };
  690.     /// \endcode
  691.     SLS_Empty,
  692.     /// Merge lambda into a single line if the lambda is argument of a function.
  693.     /// \code
  694.     ///   auto lambda = [](int x, int y) {
  695.     ///       return x < y;
  696.     ///   };
  697.     ///   sort(a.begin(), a.end(), [](int x, int y) { return x < y; });
  698.     /// \endcode
  699.     SLS_Inline,
  700.     /// Merge all lambdas fitting on a single line.
  701.     /// \code
  702.     ///   auto lambda = [](int a) {};
  703.     ///   auto lambda2 = [](int a) { return a; };
  704.     /// \endcode
  705.     SLS_All,
  706.   };
  707.  
  708.   /// Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
  709.   /// single line.
  710.   /// \version 9
  711.   ShortLambdaStyle AllowShortLambdasOnASingleLine;
  712.  
  713.   /// If ``true``, ``while (true) continue;`` can be put on a single
  714.   /// line.
  715.   /// \version 3.7
  716.   bool AllowShortLoopsOnASingleLine;
  717.  
  718.   /// Different ways to break after the function definition return type.
  719.   /// This option is **deprecated** and is retained for backwards compatibility.
  720.   enum DefinitionReturnTypeBreakingStyle : int8_t {
  721.     /// Break after return type automatically.
  722.     /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
  723.     DRTBS_None,
  724.     /// Always break after the return type.
  725.     DRTBS_All,
  726.     /// Always break after the return types of top-level functions.
  727.     DRTBS_TopLevel,
  728.   };
  729.  
  730.   /// Different ways to break after the function definition or
  731.   /// declaration return type.
  732.   enum ReturnTypeBreakingStyle : int8_t {
  733.     /// Break after return type automatically.
  734.     /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
  735.     /// \code
  736.     ///   class A {
  737.     ///     int f() { return 0; };
  738.     ///   };
  739.     ///   int f();
  740.     ///   int f() { return 1; }
  741.     /// \endcode
  742.     RTBS_None,
  743.     /// Always break after the return type.
  744.     /// \code
  745.     ///   class A {
  746.     ///     int
  747.     ///     f() {
  748.     ///       return 0;
  749.     ///     };
  750.     ///   };
  751.     ///   int
  752.     ///   f();
  753.     ///   int
  754.     ///   f() {
  755.     ///     return 1;
  756.     ///   }
  757.     /// \endcode
  758.     RTBS_All,
  759.     /// Always break after the return types of top-level functions.
  760.     /// \code
  761.     ///   class A {
  762.     ///     int f() { return 0; };
  763.     ///   };
  764.     ///   int
  765.     ///   f();
  766.     ///   int
  767.     ///   f() {
  768.     ///     return 1;
  769.     ///   }
  770.     /// \endcode
  771.     RTBS_TopLevel,
  772.     /// Always break after the return type of function definitions.
  773.     /// \code
  774.     ///   class A {
  775.     ///     int
  776.     ///     f() {
  777.     ///       return 0;
  778.     ///     };
  779.     ///   };
  780.     ///   int f();
  781.     ///   int
  782.     ///   f() {
  783.     ///     return 1;
  784.     ///   }
  785.     /// \endcode
  786.     RTBS_AllDefinitions,
  787.     /// Always break after the return type of top-level definitions.
  788.     /// \code
  789.     ///   class A {
  790.     ///     int f() { return 0; };
  791.     ///   };
  792.     ///   int f();
  793.     ///   int
  794.     ///   f() {
  795.     ///     return 1;
  796.     ///   }
  797.     /// \endcode
  798.     RTBS_TopLevelDefinitions,
  799.   };
  800.  
  801.   /// The function definition return type breaking style to use.  This
  802.   /// option is **deprecated** and is retained for backwards compatibility.
  803.   /// \version 3.7
  804.   DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
  805.  
  806.   /// The function declaration return type breaking style to use.
  807.   /// \version 3.8
  808.   ReturnTypeBreakingStyle AlwaysBreakAfterReturnType;
  809.  
  810.   /// If ``true``, always break before multiline string literals.
  811.   ///
  812.   /// This flag is mean to make cases where there are multiple multiline strings
  813.   /// in a file look more consistent. Thus, it will only take effect if wrapping
  814.   /// the string at that point leads to it being indented
  815.   /// ``ContinuationIndentWidth`` spaces from the start of the line.
  816.   /// \code
  817.   ///    true:                                  false:
  818.   ///    aaaa =                         vs.     aaaa = "bbbb"
  819.   ///        "bbbb"                                    "cccc";
  820.   ///        "cccc";
  821.   /// \endcode
  822.   /// \version 3.4
  823.   bool AlwaysBreakBeforeMultilineStrings;
  824.  
  825.   /// Different ways to break after the template declaration.
  826.   enum BreakTemplateDeclarationsStyle : int8_t {
  827.     /// Do not force break before declaration.
  828.     /// ``PenaltyBreakTemplateDeclaration`` is taken into account.
  829.     /// \code
  830.     ///    template <typename T> T foo() {
  831.     ///    }
  832.     ///    template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
  833.     ///                                int bbbbbbbbbbbbbbbbbbbbb) {
  834.     ///    }
  835.     /// \endcode
  836.     BTDS_No,
  837.     /// Force break after template declaration only when the following
  838.     /// declaration spans multiple lines.
  839.     /// \code
  840.     ///    template <typename T> T foo() {
  841.     ///    }
  842.     ///    template <typename T>
  843.     ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
  844.     ///          int bbbbbbbbbbbbbbbbbbbbb) {
  845.     ///    }
  846.     /// \endcode
  847.     BTDS_MultiLine,
  848.     /// Always break after template declaration.
  849.     /// \code
  850.     ///    template <typename T>
  851.     ///    T foo() {
  852.     ///    }
  853.     ///    template <typename T>
  854.     ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
  855.     ///          int bbbbbbbbbbbbbbbbbbbbb) {
  856.     ///    }
  857.     /// \endcode
  858.     BTDS_Yes
  859.   };
  860.  
  861.   /// The template declaration breaking style to use.
  862.   /// \version 3.4
  863.   BreakTemplateDeclarationsStyle AlwaysBreakTemplateDeclarations;
  864.  
  865.   /// A vector of strings that should be interpreted as attributes/qualifiers
  866.   /// instead of identifiers. This can be useful for language extensions or
  867.   /// static analyzer annotations.
  868.   ///
  869.   /// For example:
  870.   /// \code
  871.   ///   x = (char *__capability)&y;
  872.   ///   int function(void) __ununsed;
  873.   ///   void only_writes_to_buffer(char *__output buffer);
  874.   /// \endcode
  875.   ///
  876.   /// In the .clang-format configuration file, this can be configured like:
  877.   /// \code{.yaml}
  878.   ///   AttributeMacros: ['__capability', '__output', '__ununsed']
  879.   /// \endcode
  880.   ///
  881.   /// \version 12
  882.   std::vector<std::string> AttributeMacros;
  883.  
  884.   /// If ``false``, a function call's arguments will either be all on the
  885.   /// same line or will have one line each.
  886.   /// \code
  887.   ///   true:
  888.   ///   void f() {
  889.   ///     f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
  890.   ///       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
  891.   ///   }
  892.   ///
  893.   ///   false:
  894.   ///   void f() {
  895.   ///     f(aaaaaaaaaaaaaaaaaaaa,
  896.   ///       aaaaaaaaaaaaaaaaaaaa,
  897.   ///       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
  898.   ///   }
  899.   /// \endcode
  900.   /// \version 3.7
  901.   bool BinPackArguments;
  902.  
  903.   /// If ``false``, a function declaration's or function definition's
  904.   /// parameters will either all be on the same line or will have one line each.
  905.   /// \code
  906.   ///   true:
  907.   ///   void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
  908.   ///          int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
  909.   ///
  910.   ///   false:
  911.   ///   void f(int aaaaaaaaaaaaaaaaaaaa,
  912.   ///          int aaaaaaaaaaaaaaaaaaaa,
  913.   ///          int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
  914.   /// \endcode
  915.   /// \version 3.7
  916.   bool BinPackParameters;
  917.  
  918.   /// Styles for adding spacing around ``:`` in bitfield definitions.
  919.   enum BitFieldColonSpacingStyle : int8_t {
  920.     /// Add one space on each side of the ``:``
  921.     /// \code
  922.     ///   unsigned bf : 2;
  923.     /// \endcode
  924.     BFCS_Both,
  925.     /// Add no space around the ``:`` (except when needed for
  926.     /// ``AlignConsecutiveBitFields``).
  927.     /// \code
  928.     ///   unsigned bf:2;
  929.     /// \endcode
  930.     BFCS_None,
  931.     /// Add space before the ``:`` only
  932.     /// \code
  933.     ///   unsigned bf :2;
  934.     /// \endcode
  935.     BFCS_Before,
  936.     /// Add space after the ``:`` only (space may be added before if
  937.     /// needed for ``AlignConsecutiveBitFields``).
  938.     /// \code
  939.     ///   unsigned bf: 2;
  940.     /// \endcode
  941.     BFCS_After
  942.   };
  943.   /// The BitFieldColonSpacingStyle to use for bitfields.
  944.   /// \version 12
  945.   BitFieldColonSpacingStyle BitFieldColonSpacing;
  946.  
  947.   /// Different ways to wrap braces after control statements.
  948.   enum BraceWrappingAfterControlStatementStyle : int8_t {
  949.     /// Never wrap braces after a control statement.
  950.     /// \code
  951.     ///   if (foo()) {
  952.     ///   } else {
  953.     ///   }
  954.     ///   for (int i = 0; i < 10; ++i) {
  955.     ///   }
  956.     /// \endcode
  957.     BWACS_Never,
  958.     /// Only wrap braces after a multi-line control statement.
  959.     /// \code
  960.     ///   if (foo && bar &&
  961.     ///       baz)
  962.     ///   {
  963.     ///     quux();
  964.     ///   }
  965.     ///   while (foo || bar) {
  966.     ///   }
  967.     /// \endcode
  968.     BWACS_MultiLine,
  969.     /// Always wrap braces after a control statement.
  970.     /// \code
  971.     ///   if (foo())
  972.     ///   {
  973.     ///   } else
  974.     ///   {}
  975.     ///   for (int i = 0; i < 10; ++i)
  976.     ///   {}
  977.     /// \endcode
  978.     BWACS_Always
  979.   };
  980.  
  981.   /// Precise control over the wrapping of braces.
  982.   /// \code
  983.   ///   # Should be declared this way:
  984.   ///   BreakBeforeBraces: Custom
  985.   ///   BraceWrapping:
  986.   ///       AfterClass: true
  987.   /// \endcode
  988.   struct BraceWrappingFlags {
  989.     /// Wrap case labels.
  990.     /// \code
  991.     ///   false:                                true:
  992.     ///   switch (foo) {                vs.     switch (foo) {
  993.     ///     case 1: {                             case 1:
  994.     ///       bar();                              {
  995.     ///       break;                                bar();
  996.     ///     }                                       break;
  997.     ///     default: {                            }
  998.     ///       plop();                             default:
  999.     ///     }                                     {
  1000.     ///   }                                         plop();
  1001.     ///                                           }
  1002.     ///                                         }
  1003.     /// \endcode
  1004.     bool AfterCaseLabel;
  1005.     /// Wrap class definitions.
  1006.     /// \code
  1007.     ///   true:
  1008.     ///   class foo
  1009.     ///   {};
  1010.     ///
  1011.     ///   false:
  1012.     ///   class foo {};
  1013.     /// \endcode
  1014.     bool AfterClass;
  1015.  
  1016.     /// Wrap control statements (``if``/``for``/``while``/``switch``/..).
  1017.     BraceWrappingAfterControlStatementStyle AfterControlStatement;
  1018.     /// Wrap enum definitions.
  1019.     /// \code
  1020.     ///   true:
  1021.     ///   enum X : int
  1022.     ///   {
  1023.     ///     B
  1024.     ///   };
  1025.     ///
  1026.     ///   false:
  1027.     ///   enum X : int { B };
  1028.     /// \endcode
  1029.     bool AfterEnum;
  1030.     /// Wrap function definitions.
  1031.     /// \code
  1032.     ///   true:
  1033.     ///   void foo()
  1034.     ///   {
  1035.     ///     bar();
  1036.     ///     bar2();
  1037.     ///   }
  1038.     ///
  1039.     ///   false:
  1040.     ///   void foo() {
  1041.     ///     bar();
  1042.     ///     bar2();
  1043.     ///   }
  1044.     /// \endcode
  1045.     bool AfterFunction;
  1046.     /// Wrap namespace definitions.
  1047.     /// \code
  1048.     ///   true:
  1049.     ///   namespace
  1050.     ///   {
  1051.     ///   int foo();
  1052.     ///   int bar();
  1053.     ///   }
  1054.     ///
  1055.     ///   false:
  1056.     ///   namespace {
  1057.     ///   int foo();
  1058.     ///   int bar();
  1059.     ///   }
  1060.     /// \endcode
  1061.     bool AfterNamespace;
  1062.     /// Wrap ObjC definitions (interfaces, implementations...).
  1063.     /// \note @autoreleasepool and @synchronized blocks are wrapped
  1064.     /// according to `AfterControlStatement` flag.
  1065.     bool AfterObjCDeclaration;
  1066.     /// Wrap struct definitions.
  1067.     /// \code
  1068.     ///   true:
  1069.     ///   struct foo
  1070.     ///   {
  1071.     ///     int x;
  1072.     ///   };
  1073.     ///
  1074.     ///   false:
  1075.     ///   struct foo {
  1076.     ///     int x;
  1077.     ///   };
  1078.     /// \endcode
  1079.     bool AfterStruct;
  1080.     /// Wrap union definitions.
  1081.     /// \code
  1082.     ///   true:
  1083.     ///   union foo
  1084.     ///   {
  1085.     ///     int x;
  1086.     ///   }
  1087.     ///
  1088.     ///   false:
  1089.     ///   union foo {
  1090.     ///     int x;
  1091.     ///   }
  1092.     /// \endcode
  1093.     bool AfterUnion;
  1094.     /// Wrap extern blocks.
  1095.     /// \code
  1096.     ///   true:
  1097.     ///   extern "C"
  1098.     ///   {
  1099.     ///     int foo();
  1100.     ///   }
  1101.     ///
  1102.     ///   false:
  1103.     ///   extern "C" {
  1104.     ///   int foo();
  1105.     ///   }
  1106.     /// \endcode
  1107.     bool AfterExternBlock; // Partially superseded by IndentExternBlock
  1108.     /// Wrap before ``catch``.
  1109.     /// \code
  1110.     ///   true:
  1111.     ///   try {
  1112.     ///     foo();
  1113.     ///   }
  1114.     ///   catch () {
  1115.     ///   }
  1116.     ///
  1117.     ///   false:
  1118.     ///   try {
  1119.     ///     foo();
  1120.     ///   } catch () {
  1121.     ///   }
  1122.     /// \endcode
  1123.     bool BeforeCatch;
  1124.     /// Wrap before ``else``.
  1125.     /// \code
  1126.     ///   true:
  1127.     ///   if (foo()) {
  1128.     ///   }
  1129.     ///   else {
  1130.     ///   }
  1131.     ///
  1132.     ///   false:
  1133.     ///   if (foo()) {
  1134.     ///   } else {
  1135.     ///   }
  1136.     /// \endcode
  1137.     bool BeforeElse;
  1138.     /// Wrap lambda block.
  1139.     /// \code
  1140.     ///   true:
  1141.     ///   connect(
  1142.     ///     []()
  1143.     ///     {
  1144.     ///       foo();
  1145.     ///       bar();
  1146.     ///     });
  1147.     ///
  1148.     ///   false:
  1149.     ///   connect([]() {
  1150.     ///     foo();
  1151.     ///     bar();
  1152.     ///   });
  1153.     /// \endcode
  1154.     bool BeforeLambdaBody;
  1155.     /// Wrap before ``while``.
  1156.     /// \code
  1157.     ///   true:
  1158.     ///   do {
  1159.     ///     foo();
  1160.     ///   }
  1161.     ///   while (1);
  1162.     ///
  1163.     ///   false:
  1164.     ///   do {
  1165.     ///     foo();
  1166.     ///   } while (1);
  1167.     /// \endcode
  1168.     bool BeforeWhile;
  1169.     /// Indent the wrapped braces themselves.
  1170.     bool IndentBraces;
  1171.     /// If ``false``, empty function body can be put on a single line.
  1172.     /// This option is used only if the opening brace of the function has
  1173.     /// already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
  1174.     /// set, and the function could/should not be put on a single line (as per
  1175.     /// `AllowShortFunctionsOnASingleLine` and constructor formatting options).
  1176.     /// \code
  1177.     ///   false:          true:
  1178.     ///   int f()   vs.   int f()
  1179.     ///   {}              {
  1180.     ///                   }
  1181.     /// \endcode
  1182.     ///
  1183.     bool SplitEmptyFunction;
  1184.     /// If ``false``, empty record (e.g. class, struct or union) body
  1185.     /// can be put on a single line. This option is used only if the opening
  1186.     /// brace of the record has already been wrapped, i.e. the `AfterClass`
  1187.     /// (for classes) brace wrapping mode is set.
  1188.     /// \code
  1189.     ///   false:           true:
  1190.     ///   class Foo   vs.  class Foo
  1191.     ///   {}               {
  1192.     ///                    }
  1193.     /// \endcode
  1194.     ///
  1195.     bool SplitEmptyRecord;
  1196.     /// If ``false``, empty namespace body can be put on a single line.
  1197.     /// This option is used only if the opening brace of the namespace has
  1198.     /// already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
  1199.     /// set.
  1200.     /// \code
  1201.     ///   false:               true:
  1202.     ///   namespace Foo   vs.  namespace Foo
  1203.     ///   {}                   {
  1204.     ///                        }
  1205.     /// \endcode
  1206.     ///
  1207.     bool SplitEmptyNamespace;
  1208.   };
  1209.  
  1210.   /// Control of individual brace wrapping cases.
  1211.   ///
  1212.   /// If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
  1213.   /// each individual brace case should be handled. Otherwise, this is ignored.
  1214.   /// \code{.yaml}
  1215.   ///   # Example of usage:
  1216.   ///   BreakBeforeBraces: Custom
  1217.   ///   BraceWrapping:
  1218.   ///     AfterEnum: true
  1219.   ///     AfterStruct: false
  1220.   ///     SplitEmptyFunction: false
  1221.   /// \endcode
  1222.   /// \version 3.8
  1223.   BraceWrappingFlags BraceWrapping;
  1224.  
  1225.   /// Different ways to break after attributes.
  1226.   enum AttributeBreakingStyle : int8_t {
  1227.     /// Always break after attributes.
  1228.     /// \code
  1229.     ///   [[nodiscard]]
  1230.     ///   inline int f();
  1231.     ///   [[gnu::const]] [[nodiscard]]
  1232.     ///   int g();
  1233.     /// \endcode
  1234.     ABS_Always,
  1235.     /// Leave the line breaking after attributes as is.
  1236.     /// \code
  1237.     ///   [[nodiscard]] inline int f();
  1238.     ///   [[gnu::const]] [[nodiscard]]
  1239.     ///   int g();
  1240.     /// \endcode
  1241.     ABS_Leave,
  1242.     /// Never break after attributes.
  1243.     /// \code
  1244.     ///   [[nodiscard]] inline int f();
  1245.     ///   [[gnu::const]] [[nodiscard]] int g();
  1246.     /// \endcode
  1247.     ABS_Never,
  1248.   };
  1249.  
  1250.   /// Break after a group of C++11 attributes before a function
  1251.   /// declaration/definition name.
  1252.   /// \version 16
  1253.   AttributeBreakingStyle BreakAfterAttributes;
  1254.  
  1255.   /// If ``true``, clang-format will always break after a Json array `[`
  1256.   /// otherwise it will scan until the closing `]` to determine if it should add
  1257.   /// newlines between elements (prettier compatible).
  1258.   ///
  1259.   /// NOTE: This is currently only for formatting JSON.
  1260.   /// \code
  1261.   ///    true:                                  false:
  1262.   ///    [                          vs.      [1, 2, 3, 4]
  1263.   ///      1,
  1264.   ///      2,
  1265.   ///      3,
  1266.   ///      4
  1267.   ///    ]
  1268.   /// \endcode
  1269.   /// \version 16
  1270.   bool BreakArrays;
  1271.  
  1272.   /// The style of wrapping parameters on the same line (bin-packed) or
  1273.   /// on one line each.
  1274.   enum BinPackStyle : int8_t {
  1275.     /// Automatically determine parameter bin-packing behavior.
  1276.     BPS_Auto,
  1277.     /// Always bin-pack parameters.
  1278.     BPS_Always,
  1279.     /// Never bin-pack parameters.
  1280.     BPS_Never,
  1281.   };
  1282.  
  1283.   /// The style of breaking before or after binary operators.
  1284.   enum BinaryOperatorStyle : int8_t {
  1285.     /// Break after operators.
  1286.     /// \code
  1287.     ///    LooooooooooongType loooooooooooooooooooooongVariable =
  1288.     ///        someLooooooooooooooooongFunction();
  1289.     ///
  1290.     ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
  1291.     ///                         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
  1292.     ///                     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
  1293.     ///                 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
  1294.     ///                     ccccccccccccccccccccccccccccccccccccccccc;
  1295.     /// \endcode
  1296.     BOS_None,
  1297.     /// Break before operators that aren't assignments.
  1298.     /// \code
  1299.     ///    LooooooooooongType loooooooooooooooooooooongVariable =
  1300.     ///        someLooooooooooooooooongFunction();
  1301.     ///
  1302.     ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1303.     ///                         + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1304.     ///                     == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1305.     ///                 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1306.     ///                        > ccccccccccccccccccccccccccccccccccccccccc;
  1307.     /// \endcode
  1308.     BOS_NonAssignment,
  1309.     /// Break before operators.
  1310.     /// \code
  1311.     ///    LooooooooooongType loooooooooooooooooooooongVariable
  1312.     ///        = someLooooooooooooooooongFunction();
  1313.     ///
  1314.     ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1315.     ///                         + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1316.     ///                     == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1317.     ///                 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1318.     ///                        > ccccccccccccccccccccccccccccccccccccccccc;
  1319.     /// \endcode
  1320.     BOS_All,
  1321.   };
  1322.  
  1323.   /// The way to wrap binary operators.
  1324.   /// \version 3.6
  1325.   BinaryOperatorStyle BreakBeforeBinaryOperators;
  1326.  
  1327.   /// Different ways to attach braces to their surrounding context.
  1328.   enum BraceBreakingStyle : int8_t {
  1329.     /// Always attach braces to surrounding context.
  1330.     /// \code
  1331.     ///   namespace N {
  1332.     ///   enum E {
  1333.     ///     E1,
  1334.     ///     E2,
  1335.     ///   };
  1336.     ///
  1337.     ///   class C {
  1338.     ///   public:
  1339.     ///     C();
  1340.     ///   };
  1341.     ///
  1342.     ///   bool baz(int i) {
  1343.     ///     try {
  1344.     ///       do {
  1345.     ///         switch (i) {
  1346.     ///         case 1: {
  1347.     ///           foobar();
  1348.     ///           break;
  1349.     ///         }
  1350.     ///         default: {
  1351.     ///           break;
  1352.     ///         }
  1353.     ///         }
  1354.     ///       } while (--i);
  1355.     ///       return true;
  1356.     ///     } catch (...) {
  1357.     ///       handleError();
  1358.     ///       return false;
  1359.     ///     }
  1360.     ///   }
  1361.     ///
  1362.     ///   void foo(bool b) {
  1363.     ///     if (b) {
  1364.     ///       baz(2);
  1365.     ///     } else {
  1366.     ///       baz(5);
  1367.     ///     }
  1368.     ///   }
  1369.     ///
  1370.     ///   void bar() { foo(true); }
  1371.     ///   } // namespace N
  1372.     /// \endcode
  1373.     BS_Attach,
  1374.     /// Like ``Attach``, but break before braces on function, namespace and
  1375.     /// class definitions.
  1376.     /// \code
  1377.     ///   namespace N
  1378.     ///   {
  1379.     ///   enum E {
  1380.     ///     E1,
  1381.     ///     E2,
  1382.     ///   };
  1383.     ///
  1384.     ///   class C
  1385.     ///   {
  1386.     ///   public:
  1387.     ///     C();
  1388.     ///   };
  1389.     ///
  1390.     ///   bool baz(int i)
  1391.     ///   {
  1392.     ///     try {
  1393.     ///       do {
  1394.     ///         switch (i) {
  1395.     ///         case 1: {
  1396.     ///           foobar();
  1397.     ///           break;
  1398.     ///         }
  1399.     ///         default: {
  1400.     ///           break;
  1401.     ///         }
  1402.     ///         }
  1403.     ///       } while (--i);
  1404.     ///       return true;
  1405.     ///     } catch (...) {
  1406.     ///       handleError();
  1407.     ///       return false;
  1408.     ///     }
  1409.     ///   }
  1410.     ///
  1411.     ///   void foo(bool b)
  1412.     ///   {
  1413.     ///     if (b) {
  1414.     ///       baz(2);
  1415.     ///     } else {
  1416.     ///       baz(5);
  1417.     ///     }
  1418.     ///   }
  1419.     ///
  1420.     ///   void bar() { foo(true); }
  1421.     ///   } // namespace N
  1422.     /// \endcode
  1423.     BS_Linux,
  1424.     /// Like ``Attach``, but break before braces on enum, function, and record
  1425.     /// definitions.
  1426.     /// \code
  1427.     ///   namespace N {
  1428.     ///   enum E
  1429.     ///   {
  1430.     ///     E1,
  1431.     ///     E2,
  1432.     ///   };
  1433.     ///
  1434.     ///   class C
  1435.     ///   {
  1436.     ///   public:
  1437.     ///     C();
  1438.     ///   };
  1439.     ///
  1440.     ///   bool baz(int i)
  1441.     ///   {
  1442.     ///     try {
  1443.     ///       do {
  1444.     ///         switch (i) {
  1445.     ///         case 1: {
  1446.     ///           foobar();
  1447.     ///           break;
  1448.     ///         }
  1449.     ///         default: {
  1450.     ///           break;
  1451.     ///         }
  1452.     ///         }
  1453.     ///       } while (--i);
  1454.     ///       return true;
  1455.     ///     } catch (...) {
  1456.     ///       handleError();
  1457.     ///       return false;
  1458.     ///     }
  1459.     ///   }
  1460.     ///
  1461.     ///   void foo(bool b)
  1462.     ///   {
  1463.     ///     if (b) {
  1464.     ///       baz(2);
  1465.     ///     } else {
  1466.     ///       baz(5);
  1467.     ///     }
  1468.     ///   }
  1469.     ///
  1470.     ///   void bar() { foo(true); }
  1471.     ///   } // namespace N
  1472.     /// \endcode
  1473.     BS_Mozilla,
  1474.     /// Like ``Attach``, but break before function definitions, ``catch``, and
  1475.     /// ``else``.
  1476.     /// \code
  1477.     ///   namespace N {
  1478.     ///   enum E {
  1479.     ///     E1,
  1480.     ///     E2,
  1481.     ///   };
  1482.     ///
  1483.     ///   class C {
  1484.     ///   public:
  1485.     ///     C();
  1486.     ///   };
  1487.     ///
  1488.     ///   bool baz(int i)
  1489.     ///   {
  1490.     ///     try {
  1491.     ///       do {
  1492.     ///         switch (i) {
  1493.     ///         case 1: {
  1494.     ///           foobar();
  1495.     ///           break;
  1496.     ///         }
  1497.     ///         default: {
  1498.     ///           break;
  1499.     ///         }
  1500.     ///         }
  1501.     ///       } while (--i);
  1502.     ///       return true;
  1503.     ///     }
  1504.     ///     catch (...) {
  1505.     ///       handleError();
  1506.     ///       return false;
  1507.     ///     }
  1508.     ///   }
  1509.     ///
  1510.     ///   void foo(bool b)
  1511.     ///   {
  1512.     ///     if (b) {
  1513.     ///       baz(2);
  1514.     ///     }
  1515.     ///     else {
  1516.     ///       baz(5);
  1517.     ///     }
  1518.     ///   }
  1519.     ///
  1520.     ///   void bar() { foo(true); }
  1521.     ///   } // namespace N
  1522.     /// \endcode
  1523.     BS_Stroustrup,
  1524.     /// Always break before braces.
  1525.     /// \code
  1526.     ///   namespace N
  1527.     ///   {
  1528.     ///   enum E
  1529.     ///   {
  1530.     ///     E1,
  1531.     ///     E2,
  1532.     ///   };
  1533.     ///
  1534.     ///   class C
  1535.     ///   {
  1536.     ///   public:
  1537.     ///     C();
  1538.     ///   };
  1539.     ///
  1540.     ///   bool baz(int i)
  1541.     ///   {
  1542.     ///     try
  1543.     ///     {
  1544.     ///       do
  1545.     ///       {
  1546.     ///         switch (i)
  1547.     ///         {
  1548.     ///         case 1:
  1549.     ///         {
  1550.     ///           foobar();
  1551.     ///           break;
  1552.     ///         }
  1553.     ///         default:
  1554.     ///         {
  1555.     ///           break;
  1556.     ///         }
  1557.     ///         }
  1558.     ///       } while (--i);
  1559.     ///       return true;
  1560.     ///     }
  1561.     ///     catch (...)
  1562.     ///     {
  1563.     ///       handleError();
  1564.     ///       return false;
  1565.     ///     }
  1566.     ///   }
  1567.     ///
  1568.     ///   void foo(bool b)
  1569.     ///   {
  1570.     ///     if (b)
  1571.     ///     {
  1572.     ///       baz(2);
  1573.     ///     }
  1574.     ///     else
  1575.     ///     {
  1576.     ///       baz(5);
  1577.     ///     }
  1578.     ///   }
  1579.     ///
  1580.     ///   void bar() { foo(true); }
  1581.     ///   } // namespace N
  1582.     /// \endcode
  1583.     BS_Allman,
  1584.     /// Like ``Allman`` but always indent braces and line up code with braces.
  1585.     /// \code
  1586.     ///   namespace N
  1587.     ///     {
  1588.     ///   enum E
  1589.     ///     {
  1590.     ///     E1,
  1591.     ///     E2,
  1592.     ///     };
  1593.     ///
  1594.     ///   class C
  1595.     ///     {
  1596.     ///   public:
  1597.     ///     C();
  1598.     ///     };
  1599.     ///
  1600.     ///   bool baz(int i)
  1601.     ///     {
  1602.     ///     try
  1603.     ///       {
  1604.     ///       do
  1605.     ///         {
  1606.     ///         switch (i)
  1607.     ///           {
  1608.     ///           case 1:
  1609.     ///           {
  1610.     ///           foobar();
  1611.     ///           break;
  1612.     ///           }
  1613.     ///           default:
  1614.     ///           {
  1615.     ///           break;
  1616.     ///           }
  1617.     ///           }
  1618.     ///         } while (--i);
  1619.     ///       return true;
  1620.     ///       }
  1621.     ///     catch (...)
  1622.     ///       {
  1623.     ///       handleError();
  1624.     ///       return false;
  1625.     ///       }
  1626.     ///     }
  1627.     ///
  1628.     ///   void foo(bool b)
  1629.     ///     {
  1630.     ///     if (b)
  1631.     ///       {
  1632.     ///       baz(2);
  1633.     ///       }
  1634.     ///     else
  1635.     ///       {
  1636.     ///       baz(5);
  1637.     ///       }
  1638.     ///     }
  1639.     ///
  1640.     ///   void bar() { foo(true); }
  1641.     ///     } // namespace N
  1642.     /// \endcode
  1643.     BS_Whitesmiths,
  1644.     /// Always break before braces and add an extra level of indentation to
  1645.     /// braces of control statements, not to those of class, function
  1646.     /// or other definitions.
  1647.     /// \code
  1648.     ///   namespace N
  1649.     ///   {
  1650.     ///   enum E
  1651.     ///   {
  1652.     ///     E1,
  1653.     ///     E2,
  1654.     ///   };
  1655.     ///
  1656.     ///   class C
  1657.     ///   {
  1658.     ///   public:
  1659.     ///     C();
  1660.     ///   };
  1661.     ///
  1662.     ///   bool baz(int i)
  1663.     ///   {
  1664.     ///     try
  1665.     ///       {
  1666.     ///         do
  1667.     ///           {
  1668.     ///             switch (i)
  1669.     ///               {
  1670.     ///               case 1:
  1671.     ///                 {
  1672.     ///                   foobar();
  1673.     ///                   break;
  1674.     ///                 }
  1675.     ///               default:
  1676.     ///                 {
  1677.     ///                   break;
  1678.     ///                 }
  1679.     ///               }
  1680.     ///           }
  1681.     ///         while (--i);
  1682.     ///         return true;
  1683.     ///       }
  1684.     ///     catch (...)
  1685.     ///       {
  1686.     ///         handleError();
  1687.     ///         return false;
  1688.     ///       }
  1689.     ///   }
  1690.     ///
  1691.     ///   void foo(bool b)
  1692.     ///   {
  1693.     ///     if (b)
  1694.     ///       {
  1695.     ///         baz(2);
  1696.     ///       }
  1697.     ///     else
  1698.     ///       {
  1699.     ///         baz(5);
  1700.     ///       }
  1701.     ///   }
  1702.     ///
  1703.     ///   void bar() { foo(true); }
  1704.     ///   } // namespace N
  1705.     /// \endcode
  1706.     BS_GNU,
  1707.     /// Like ``Attach``, but break before functions.
  1708.     /// \code
  1709.     ///   namespace N {
  1710.     ///   enum E {
  1711.     ///     E1,
  1712.     ///     E2,
  1713.     ///   };
  1714.     ///
  1715.     ///   class C {
  1716.     ///   public:
  1717.     ///     C();
  1718.     ///   };
  1719.     ///
  1720.     ///   bool baz(int i)
  1721.     ///   {
  1722.     ///     try {
  1723.     ///       do {
  1724.     ///         switch (i) {
  1725.     ///         case 1: {
  1726.     ///           foobar();
  1727.     ///           break;
  1728.     ///         }
  1729.     ///         default: {
  1730.     ///           break;
  1731.     ///         }
  1732.     ///         }
  1733.     ///       } while (--i);
  1734.     ///       return true;
  1735.     ///     } catch (...) {
  1736.     ///       handleError();
  1737.     ///       return false;
  1738.     ///     }
  1739.     ///   }
  1740.     ///
  1741.     ///   void foo(bool b)
  1742.     ///   {
  1743.     ///     if (b) {
  1744.     ///       baz(2);
  1745.     ///     } else {
  1746.     ///       baz(5);
  1747.     ///     }
  1748.     ///   }
  1749.     ///
  1750.     ///   void bar() { foo(true); }
  1751.     ///   } // namespace N
  1752.     /// \endcode
  1753.     BS_WebKit,
  1754.     /// Configure each individual brace in `BraceWrapping`.
  1755.     BS_Custom
  1756.   };
  1757.  
  1758.   /// The brace breaking style to use.
  1759.   /// \version 3.7
  1760.   BraceBreakingStyle BreakBeforeBraces;
  1761.  
  1762.   /// Different ways to break before concept declarations.
  1763.   enum BreakBeforeConceptDeclarationsStyle : int8_t {
  1764.     /// Keep the template declaration line together with ``concept``.
  1765.     /// \code
  1766.     ///   template <typename T> concept C = ...;
  1767.     /// \endcode
  1768.     BBCDS_Never,
  1769.     /// Breaking between template declaration and ``concept`` is allowed. The
  1770.     /// actual behavior depends on the content and line breaking rules and
  1771.     /// penalities.
  1772.     BBCDS_Allowed,
  1773.     /// Always break before ``concept``, putting it in the line after the
  1774.     /// template declaration.
  1775.     /// \code
  1776.     ///   template <typename T>
  1777.     ///   concept C = ...;
  1778.     /// \endcode
  1779.     BBCDS_Always,
  1780.   };
  1781.  
  1782.   /// The concept declaration style to use.
  1783.   /// \version 12
  1784.   BreakBeforeConceptDeclarationsStyle BreakBeforeConceptDeclarations;
  1785.  
  1786.   /// Different ways to break ASM parameters.
  1787.   enum BreakBeforeInlineASMColonStyle : int8_t {
  1788.     /// No break before inline ASM colon.
  1789.     /// \code
  1790.     ///    asm volatile("string", : : val);
  1791.     /// \endcode
  1792.     BBIAS_Never,
  1793.     /// Break before inline ASM colon if the line length is longer than column
  1794.     /// limit.
  1795.     /// \code
  1796.     ///    asm volatile("string", : : val);
  1797.     ///    asm("cmoveq %1, %2, %[result]"
  1798.     ///        : [result] "=r"(result)
  1799.     ///        : "r"(test), "r"(new), "[result]"(old));
  1800.     /// \endcode
  1801.     BBIAS_OnlyMultiline,
  1802.     /// Always break before inline ASM colon.
  1803.     /// \code
  1804.     ///    asm volatile("string",
  1805.     ///                 :
  1806.     ///                 : val);
  1807.     /// \endcode
  1808.     BBIAS_Always,
  1809.   };
  1810.  
  1811.   /// The inline ASM colon style to use.
  1812.   /// \version 16
  1813.   BreakBeforeInlineASMColonStyle BreakBeforeInlineASMColon;
  1814.  
  1815.   /// If ``true``, ternary operators will be placed after line breaks.
  1816.   /// \code
  1817.   ///    true:
  1818.   ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
  1819.   ///        ? firstValue
  1820.   ///        : SecondValueVeryVeryVeryVeryLong;
  1821.   ///
  1822.   ///    false:
  1823.   ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
  1824.   ///        firstValue :
  1825.   ///        SecondValueVeryVeryVeryVeryLong;
  1826.   /// \endcode
  1827.   /// \version 3.7
  1828.   bool BreakBeforeTernaryOperators;
  1829.  
  1830.   /// Different ways to break initializers.
  1831.   enum BreakConstructorInitializersStyle : int8_t {
  1832.     /// Break constructor initializers before the colon and after the commas.
  1833.     /// \code
  1834.     ///    Constructor()
  1835.     ///        : initializer1(),
  1836.     ///          initializer2()
  1837.     /// \endcode
  1838.     BCIS_BeforeColon,
  1839.     /// Break constructor initializers before the colon and commas, and align
  1840.     /// the commas with the colon.
  1841.     /// \code
  1842.     ///    Constructor()
  1843.     ///        : initializer1()
  1844.     ///        , initializer2()
  1845.     /// \endcode
  1846.     BCIS_BeforeComma,
  1847.     /// Break constructor initializers after the colon and commas.
  1848.     /// \code
  1849.     ///    Constructor() :
  1850.     ///        initializer1(),
  1851.     ///        initializer2()
  1852.     /// \endcode
  1853.     BCIS_AfterColon
  1854.   };
  1855.  
  1856.   /// The break constructor initializers style to use.
  1857.   /// \version 5
  1858.   BreakConstructorInitializersStyle BreakConstructorInitializers;
  1859.  
  1860.   /// Break after each annotation on a field in Java files.
  1861.   /// \code{.java}
  1862.   ///    true:                                  false:
  1863.   ///    @Partial                       vs.     @Partial @Mock DataLoad loader;
  1864.   ///    @Mock
  1865.   ///    DataLoad loader;
  1866.   /// \endcode
  1867.   /// \version 3.8
  1868.   bool BreakAfterJavaFieldAnnotations;
  1869.  
  1870.   /// Allow breaking string literals when formatting.
  1871.   /// \code
  1872.   ///    true:
  1873.   ///    const char* x = "veryVeryVeryVeryVeryVe"
  1874.   ///                    "ryVeryVeryVeryVeryVery"
  1875.   ///                    "VeryLongString";
  1876.   ///
  1877.   ///    false:
  1878.   ///    const char* x =
  1879.   ///      "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
  1880.   /// \endcode
  1881.   /// \version 3.9
  1882.   bool BreakStringLiterals;
  1883.  
  1884.   /// The column limit.
  1885.   ///
  1886.   /// A column limit of ``0`` means that there is no column limit. In this case,
  1887.   /// clang-format will respect the input's line breaking decisions within
  1888.   /// statements unless they contradict other rules.
  1889.   /// \version 3.7
  1890.   unsigned ColumnLimit;
  1891.  
  1892.   /// A regular expression that describes comments with special meaning,
  1893.   /// which should not be split into lines or otherwise changed.
  1894.   /// \code
  1895.   ///    // CommentPragmas: '^ FOOBAR pragma:'
  1896.   ///    // Will leave the following line unaffected
  1897.   ///    #include <vector> // FOOBAR pragma: keep
  1898.   /// \endcode
  1899.   /// \version 3.7
  1900.   std::string CommentPragmas;
  1901.  
  1902.   /// Different ways to break inheritance list.
  1903.   enum BreakInheritanceListStyle : int8_t {
  1904.     /// Break inheritance list before the colon and after the commas.
  1905.     /// \code
  1906.     ///    class Foo
  1907.     ///        : Base1,
  1908.     ///          Base2
  1909.     ///    {};
  1910.     /// \endcode
  1911.     BILS_BeforeColon,
  1912.     /// Break inheritance list before the colon and commas, and align
  1913.     /// the commas with the colon.
  1914.     /// \code
  1915.     ///    class Foo
  1916.     ///        : Base1
  1917.     ///        , Base2
  1918.     ///    {};
  1919.     /// \endcode
  1920.     BILS_BeforeComma,
  1921.     /// Break inheritance list after the colon and commas.
  1922.     /// \code
  1923.     ///    class Foo :
  1924.     ///        Base1,
  1925.     ///        Base2
  1926.     ///    {};
  1927.     /// \endcode
  1928.     BILS_AfterColon,
  1929.     /// Break inheritance list only after the commas.
  1930.     /// \code
  1931.     ///    class Foo : Base1,
  1932.     ///                Base2
  1933.     ///    {};
  1934.     /// \endcode
  1935.     BILS_AfterComma,
  1936.   };
  1937.  
  1938.   /// The inheritance list style to use.
  1939.   /// \version 7
  1940.   BreakInheritanceListStyle BreakInheritanceList;
  1941.  
  1942.   /// If ``true``, consecutive namespace declarations will be on the same
  1943.   /// line. If ``false``, each namespace is declared on a new line.
  1944.   /// \code
  1945.   ///   true:
  1946.   ///   namespace Foo { namespace Bar {
  1947.   ///   }}
  1948.   ///
  1949.   ///   false:
  1950.   ///   namespace Foo {
  1951.   ///   namespace Bar {
  1952.   ///   }
  1953.   ///   }
  1954.   /// \endcode
  1955.   ///
  1956.   /// If it does not fit on a single line, the overflowing namespaces get
  1957.   /// wrapped:
  1958.   /// \code
  1959.   ///   namespace Foo { namespace Bar {
  1960.   ///   namespace Extra {
  1961.   ///   }}}
  1962.   /// \endcode
  1963.   /// \version 5
  1964.   bool CompactNamespaces;
  1965.  
  1966.   /// This option is **deprecated**. See ``CurrentLine`` of
  1967.   /// ``PackConstructorInitializers``.
  1968.   /// \version 3.7
  1969.   // bool ConstructorInitializerAllOnOneLineOrOnePerLine;
  1970.  
  1971.   /// The number of characters to use for indentation of constructor
  1972.   /// initializer lists as well as inheritance lists.
  1973.   /// \version 3.7
  1974.   unsigned ConstructorInitializerIndentWidth;
  1975.  
  1976.   /// Indent width for line continuations.
  1977.   /// \code
  1978.   ///    ContinuationIndentWidth: 2
  1979.   ///
  1980.   ///    int i =         //  VeryVeryVeryVeryVeryLongComment
  1981.   ///      longFunction( // Again a long comment
  1982.   ///        arg);
  1983.   /// \endcode
  1984.   /// \version 3.7
  1985.   unsigned ContinuationIndentWidth;
  1986.  
  1987.   /// If ``true``, format braced lists as best suited for C++11 braced
  1988.   /// lists.
  1989.   ///
  1990.   /// Important differences:
  1991.   /// - No spaces inside the braced list.
  1992.   /// - No line break before the closing brace.
  1993.   /// - Indentation with the continuation indent, not with the block indent.
  1994.   ///
  1995.   /// Fundamentally, C++11 braced lists are formatted exactly like function
  1996.   /// calls would be formatted in their place. If the braced list follows a name
  1997.   /// (e.g. a type or variable name), clang-format formats as if the ``{}`` were
  1998.   /// the parentheses of a function call with that name. If there is no name,
  1999.   /// a zero-length name is assumed.
  2000.   /// \code
  2001.   ///    true:                                  false:
  2002.   ///    vector<int> x{1, 2, 3, 4};     vs.     vector<int> x{ 1, 2, 3, 4 };
  2003.   ///    vector<T> x{{}, {}, {}, {}};           vector<T> x{ {}, {}, {}, {} };
  2004.   ///    f(MyMap[{composite, key}]);            f(MyMap[{ composite, key }]);
  2005.   ///    new int[3]{1, 2, 3};                   new int[3]{ 1, 2, 3 };
  2006.   /// \endcode
  2007.   /// \version 3.4
  2008.   bool Cpp11BracedListStyle;
  2009.  
  2010.   /// This option is **deprecated**. See ``DeriveLF`` and ``DeriveCRLF`` of
  2011.   /// ``LineEnding``.
  2012.   /// \version 10
  2013.   // bool DeriveLineEnding;
  2014.  
  2015.   /// If ``true``, analyze the formatted file for the most common
  2016.   /// alignment of ``&`` and ``*``.
  2017.   /// Pointer and reference alignment styles are going to be updated according
  2018.   /// to the preferences found in the file.
  2019.   /// ``PointerAlignment`` is then used only as fallback.
  2020.   /// \version 3.7
  2021.   bool DerivePointerAlignment;
  2022.  
  2023.   /// Disables formatting completely.
  2024.   /// \version 3.7
  2025.   bool DisableFormat;
  2026.  
  2027.   /// Different styles for empty line after access modifiers.
  2028.   /// ``EmptyLineBeforeAccessModifier`` configuration handles the number of
  2029.   /// empty lines between two access modifiers.
  2030.   enum EmptyLineAfterAccessModifierStyle : int8_t {
  2031.     /// Remove all empty lines after access modifiers.
  2032.     /// \code
  2033.     ///   struct foo {
  2034.     ///   private:
  2035.     ///     int i;
  2036.     ///   protected:
  2037.     ///     int j;
  2038.     ///     /* comment */
  2039.     ///   public:
  2040.     ///     foo() {}
  2041.     ///   private:
  2042.     ///   protected:
  2043.     ///   };
  2044.     /// \endcode
  2045.     ELAAMS_Never,
  2046.     /// Keep existing empty lines after access modifiers.
  2047.     /// MaxEmptyLinesToKeep is applied instead.
  2048.     ELAAMS_Leave,
  2049.     /// Always add empty line after access modifiers if there are none.
  2050.     /// MaxEmptyLinesToKeep is applied also.
  2051.     /// \code
  2052.     ///   struct foo {
  2053.     ///   private:
  2054.     ///
  2055.     ///     int i;
  2056.     ///   protected:
  2057.     ///
  2058.     ///     int j;
  2059.     ///     /* comment */
  2060.     ///   public:
  2061.     ///
  2062.     ///     foo() {}
  2063.     ///   private:
  2064.     ///
  2065.     ///   protected:
  2066.     ///
  2067.     ///   };
  2068.     /// \endcode
  2069.     ELAAMS_Always,
  2070.   };
  2071.  
  2072.   /// Defines when to put an empty line after access modifiers.
  2073.   /// ``EmptyLineBeforeAccessModifier`` configuration handles the number of
  2074.   /// empty lines between two access modifiers.
  2075.   /// \version 13
  2076.   EmptyLineAfterAccessModifierStyle EmptyLineAfterAccessModifier;
  2077.  
  2078.   /// Different styles for empty line before access modifiers.
  2079.   enum EmptyLineBeforeAccessModifierStyle : int8_t {
  2080.     /// Remove all empty lines before access modifiers.
  2081.     /// \code
  2082.     ///   struct foo {
  2083.     ///   private:
  2084.     ///     int i;
  2085.     ///   protected:
  2086.     ///     int j;
  2087.     ///     /* comment */
  2088.     ///   public:
  2089.     ///     foo() {}
  2090.     ///   private:
  2091.     ///   protected:
  2092.     ///   };
  2093.     /// \endcode
  2094.     ELBAMS_Never,
  2095.     /// Keep existing empty lines before access modifiers.
  2096.     ELBAMS_Leave,
  2097.     /// Add empty line only when access modifier starts a new logical block.
  2098.     /// Logical block is a group of one or more member fields or functions.
  2099.     /// \code
  2100.     ///   struct foo {
  2101.     ///   private:
  2102.     ///     int i;
  2103.     ///
  2104.     ///   protected:
  2105.     ///     int j;
  2106.     ///     /* comment */
  2107.     ///   public:
  2108.     ///     foo() {}
  2109.     ///
  2110.     ///   private:
  2111.     ///   protected:
  2112.     ///   };
  2113.     /// \endcode
  2114.     ELBAMS_LogicalBlock,
  2115.     /// Always add empty line before access modifiers unless access modifier
  2116.     /// is at the start of struct or class definition.
  2117.     /// \code
  2118.     ///   struct foo {
  2119.     ///   private:
  2120.     ///     int i;
  2121.     ///
  2122.     ///   protected:
  2123.     ///     int j;
  2124.     ///     /* comment */
  2125.     ///
  2126.     ///   public:
  2127.     ///     foo() {}
  2128.     ///
  2129.     ///   private:
  2130.     ///
  2131.     ///   protected:
  2132.     ///   };
  2133.     /// \endcode
  2134.     ELBAMS_Always,
  2135.   };
  2136.  
  2137.   /// Defines in which cases to put empty line before access modifiers.
  2138.   /// \version 12
  2139.   EmptyLineBeforeAccessModifierStyle EmptyLineBeforeAccessModifier;
  2140.  
  2141.   /// If ``true``, clang-format detects whether function calls and
  2142.   /// definitions are formatted with one parameter per line.
  2143.   ///
  2144.   /// Each call can be bin-packed, one-per-line or inconclusive. If it is
  2145.   /// inconclusive, e.g. completely on one line, but a decision needs to be
  2146.   /// made, clang-format analyzes whether there are other bin-packed cases in
  2147.   /// the input file and act accordingly.
  2148.   ///
  2149.   /// NOTE: This is an experimental flag, that might go away or be renamed. Do
  2150.   /// not use this in config files, etc. Use at your own risk.
  2151.   /// \version 3.7
  2152.   bool ExperimentalAutoDetectBinPacking;
  2153.  
  2154.   /// If ``true``, clang-format adds missing namespace end comments for
  2155.   /// namespaces and fixes invalid existing ones. This doesn't affect short
  2156.   /// namespaces, which are controlled by ``ShortNamespaceLines``.
  2157.   /// \code
  2158.   ///    true:                                  false:
  2159.   ///    namespace longNamespace {      vs.     namespace longNamespace {
  2160.   ///    void foo();                            void foo();
  2161.   ///    void bar();                            void bar();
  2162.   ///    } // namespace a                       }
  2163.   ///    namespace shortNamespace {             namespace shortNamespace {
  2164.   ///    void baz();                            void baz();
  2165.   ///    }                                      }
  2166.   /// \endcode
  2167.   /// \version 5
  2168.   bool FixNamespaceComments;
  2169.  
  2170.   /// A vector of macros that should be interpreted as foreach loops
  2171.   /// instead of as function calls.
  2172.   ///
  2173.   /// These are expected to be macros of the form:
  2174.   /// \code
  2175.   ///   FOREACH(<variable-declaration>, ...)
  2176.   ///     <loop-body>
  2177.   /// \endcode
  2178.   ///
  2179.   /// In the .clang-format configuration file, this can be configured like:
  2180.   /// \code{.yaml}
  2181.   ///   ForEachMacros: ['RANGES_FOR', 'FOREACH']
  2182.   /// \endcode
  2183.   ///
  2184.   /// For example: BOOST_FOREACH.
  2185.   /// \version 3.7
  2186.   std::vector<std::string> ForEachMacros;
  2187.  
  2188.   tooling::IncludeStyle IncludeStyle;
  2189.  
  2190.   /// A vector of macros that should be interpreted as conditionals
  2191.   /// instead of as function calls.
  2192.   ///
  2193.   /// These are expected to be macros of the form:
  2194.   /// \code
  2195.   ///   IF(...)
  2196.   ///     <conditional-body>
  2197.   ///   else IF(...)
  2198.   ///     <conditional-body>
  2199.   /// \endcode
  2200.   ///
  2201.   /// In the .clang-format configuration file, this can be configured like:
  2202.   /// \code{.yaml}
  2203.   ///   IfMacros: ['IF']
  2204.   /// \endcode
  2205.   ///
  2206.   /// For example: `KJ_IF_MAYBE
  2207.   /// <https://github.com/capnproto/capnproto/blob/master/kjdoc/tour.md#maybes>`_
  2208.   /// \version 13
  2209.   std::vector<std::string> IfMacros;
  2210.  
  2211.   /// Specify whether access modifiers should have their own indentation level.
  2212.   ///
  2213.   /// When ``false``, access modifiers are indented (or outdented) relative to
  2214.   /// the record members, respecting the ``AccessModifierOffset``. Record
  2215.   /// members are indented one level below the record.
  2216.   /// When ``true``, access modifiers get their own indentation level. As a
  2217.   /// consequence, record members are always indented 2 levels below the record,
  2218.   /// regardless of the access modifier presence. Value of the
  2219.   /// ``AccessModifierOffset`` is ignored.
  2220.   /// \code
  2221.   ///    false:                                 true:
  2222.   ///    class C {                      vs.     class C {
  2223.   ///      class D {                                class D {
  2224.   ///        void bar();                                void bar();
  2225.   ///      protected:                                 protected:
  2226.   ///        D();                                       D();
  2227.   ///      };                                       };
  2228.   ///    public:                                  public:
  2229.   ///      C();                                     C();
  2230.   ///    };                                     };
  2231.   ///    void foo() {                           void foo() {
  2232.   ///      return 1;                              return 1;
  2233.   ///    }                                      }
  2234.   /// \endcode
  2235.   /// \version 13
  2236.   bool IndentAccessModifiers;
  2237.  
  2238.   /// Indent case label blocks one level from the case label.
  2239.   ///
  2240.   /// When ``false``, the block following the case label uses the same
  2241.   /// indentation level as for the case label, treating the case label the same
  2242.   /// as an if-statement.
  2243.   /// When ``true``, the block gets indented as a scope block.
  2244.   /// \code
  2245.   ///    false:                                 true:
  2246.   ///    switch (fool) {                vs.     switch (fool) {
  2247.   ///    case 1: {                              case 1:
  2248.   ///      bar();                                 {
  2249.   ///    } break;                                   bar();
  2250.   ///    default: {                               }
  2251.   ///      plop();                                break;
  2252.   ///    }                                      default:
  2253.   ///    }                                        {
  2254.   ///                                               plop();
  2255.   ///                                             }
  2256.   ///                                           }
  2257.   /// \endcode
  2258.   /// \version 11
  2259.   bool IndentCaseBlocks;
  2260.  
  2261.   /// Indent case labels one level from the switch statement.
  2262.   ///
  2263.   /// When ``false``, use the same indentation level as for the switch
  2264.   /// statement. Switch statement body is always indented one level more than
  2265.   /// case labels (except the first block following the case label, which
  2266.   /// itself indents the code - unless IndentCaseBlocks is enabled).
  2267.   /// \code
  2268.   ///    false:                                 true:
  2269.   ///    switch (fool) {                vs.     switch (fool) {
  2270.   ///    case 1:                                  case 1:
  2271.   ///      bar();                                   bar();
  2272.   ///      break;                                   break;
  2273.   ///    default:                                 default:
  2274.   ///      plop();                                  plop();
  2275.   ///    }                                      }
  2276.   /// \endcode
  2277.   /// \version 3.3
  2278.   bool IndentCaseLabels;
  2279.  
  2280.   /// Indent goto labels.
  2281.   ///
  2282.   /// When ``false``, goto labels are flushed left.
  2283.   /// \code
  2284.   ///    true:                                  false:
  2285.   ///    int f() {                      vs.     int f() {
  2286.   ///      if (foo()) {                           if (foo()) {
  2287.   ///      label1:                              label1:
  2288.   ///        bar();                                 bar();
  2289.   ///      }                                      }
  2290.   ///    label2:                                label2:
  2291.   ///      return 1;                              return 1;
  2292.   ///    }                                      }
  2293.   /// \endcode
  2294.   /// \version 10
  2295.   bool IndentGotoLabels;
  2296.  
  2297.   /// Indents extern blocks
  2298.   enum IndentExternBlockStyle : int8_t {
  2299.     /// Backwards compatible with AfterExternBlock's indenting.
  2300.     /// \code
  2301.     ///    IndentExternBlock: AfterExternBlock
  2302.     ///    BraceWrapping.AfterExternBlock: true
  2303.     ///    extern "C"
  2304.     ///    {
  2305.     ///        void foo();
  2306.     ///    }
  2307.     /// \endcode
  2308.     ///
  2309.     /// \code
  2310.     ///    IndentExternBlock: AfterExternBlock
  2311.     ///    BraceWrapping.AfterExternBlock: false
  2312.     ///    extern "C" {
  2313.     ///    void foo();
  2314.     ///    }
  2315.     /// \endcode
  2316.     IEBS_AfterExternBlock,
  2317.     /// Does not indent extern blocks.
  2318.     /// \code
  2319.     ///     extern "C" {
  2320.     ///     void foo();
  2321.     ///     }
  2322.     /// \endcode
  2323.     IEBS_NoIndent,
  2324.     /// Indents extern blocks.
  2325.     /// \code
  2326.     ///     extern "C" {
  2327.     ///       void foo();
  2328.     ///     }
  2329.     /// \endcode
  2330.     IEBS_Indent,
  2331.   };
  2332.  
  2333.   /// IndentExternBlockStyle is the type of indenting of extern blocks.
  2334.   /// \version 11
  2335.   IndentExternBlockStyle IndentExternBlock;
  2336.  
  2337.   /// Options for indenting preprocessor directives.
  2338.   enum PPDirectiveIndentStyle : int8_t {
  2339.     /// Does not indent any directives.
  2340.     /// \code
  2341.     ///    #if FOO
  2342.     ///    #if BAR
  2343.     ///    #include <foo>
  2344.     ///    #endif
  2345.     ///    #endif
  2346.     /// \endcode
  2347.     PPDIS_None,
  2348.     /// Indents directives after the hash.
  2349.     /// \code
  2350.     ///    #if FOO
  2351.     ///    #  if BAR
  2352.     ///    #    include <foo>
  2353.     ///    #  endif
  2354.     ///    #endif
  2355.     /// \endcode
  2356.     PPDIS_AfterHash,
  2357.     /// Indents directives before the hash.
  2358.     /// \code
  2359.     ///    #if FOO
  2360.     ///      #if BAR
  2361.     ///        #include <foo>
  2362.     ///      #endif
  2363.     ///    #endif
  2364.     /// \endcode
  2365.     PPDIS_BeforeHash
  2366.   };
  2367.  
  2368.   /// The preprocessor directive indenting style to use.
  2369.   /// \version 6
  2370.   PPDirectiveIndentStyle IndentPPDirectives;
  2371.  
  2372.   /// Indent the requires clause in a template. This only applies when
  2373.   /// ``RequiresClausePosition`` is ``OwnLine``, or ``WithFollowing``.
  2374.   ///
  2375.   /// In clang-format 12, 13 and 14 it was named ``IndentRequires``.
  2376.   /// \code
  2377.   ///    true:
  2378.   ///    template <typename It>
  2379.   ///      requires Iterator<It>
  2380.   ///    void sort(It begin, It end) {
  2381.   ///      //....
  2382.   ///    }
  2383.   ///
  2384.   ///    false:
  2385.   ///    template <typename It>
  2386.   ///    requires Iterator<It>
  2387.   ///    void sort(It begin, It end) {
  2388.   ///      //....
  2389.   ///    }
  2390.   /// \endcode
  2391.   /// \version 15
  2392.   bool IndentRequiresClause;
  2393.  
  2394.   /// The number of columns to use for indentation.
  2395.   /// \code
  2396.   ///    IndentWidth: 3
  2397.   ///
  2398.   ///    void f() {
  2399.   ///       someFunction();
  2400.   ///       if (true, false) {
  2401.   ///          f();
  2402.   ///       }
  2403.   ///    }
  2404.   /// \endcode
  2405.   /// \version 3.7
  2406.   unsigned IndentWidth;
  2407.  
  2408.   /// Indent if a function definition or declaration is wrapped after the
  2409.   /// type.
  2410.   /// \code
  2411.   ///    true:
  2412.   ///    LoooooooooooooooooooooooooooooooooooooooongReturnType
  2413.   ///        LoooooooooooooooooooooooooooooooongFunctionDeclaration();
  2414.   ///
  2415.   ///    false:
  2416.   ///    LoooooooooooooooooooooooooooooooooooooooongReturnType
  2417.   ///    LoooooooooooooooooooooooooooooooongFunctionDeclaration();
  2418.   /// \endcode
  2419.   /// \version 3.7
  2420.   bool IndentWrappedFunctionNames;
  2421.  
  2422.   /// Insert braces after control statements (``if``, ``else``, ``for``, ``do``,
  2423.   /// and ``while``) in C++ unless the control statements are inside macro
  2424.   /// definitions or the braces would enclose preprocessor directives.
  2425.   /// \warning
  2426.   ///  Setting this option to `true` could lead to incorrect code formatting due
  2427.   ///  to clang-format's lack of complete semantic information. As such, extra
  2428.   ///  care should be taken to review code changes made by this option.
  2429.   /// \endwarning
  2430.   /// \code
  2431.   ///   false:                                    true:
  2432.   ///
  2433.   ///   if (isa<FunctionDecl>(D))        vs.      if (isa<FunctionDecl>(D)) {
  2434.   ///     handleFunctionDecl(D);                    handleFunctionDecl(D);
  2435.   ///   else if (isa<VarDecl>(D))                 } else if (isa<VarDecl>(D)) {
  2436.   ///     handleVarDecl(D);                         handleVarDecl(D);
  2437.   ///   else                                      } else {
  2438.   ///     return;                                   return;
  2439.   ///                                             }
  2440.   ///
  2441.   ///   while (i--)                      vs.      while (i--) {
  2442.   ///     for (auto *A : D.attrs())                 for (auto *A : D.attrs()) {
  2443.   ///       handleAttr(A);                            handleAttr(A);
  2444.   ///                                               }
  2445.   ///                                             }
  2446.   ///
  2447.   ///   do                               vs.      do {
  2448.   ///     --i;                                      --i;
  2449.   ///   while (i);                                } while (i);
  2450.   /// \endcode
  2451.   /// \version 15
  2452.   bool InsertBraces;
  2453.  
  2454.   /// Insert a newline at end of file if missing.
  2455.   /// \version 16
  2456.   bool InsertNewlineAtEOF;
  2457.  
  2458.   /// The style of inserting trailing commas into container literals.
  2459.   enum TrailingCommaStyle : int8_t {
  2460.     /// Do not insert trailing commas.
  2461.     TCS_None,
  2462.     /// Insert trailing commas in container literals that were wrapped over
  2463.     /// multiple lines. Note that this is conceptually incompatible with
  2464.     /// bin-packing, because the trailing comma is used as an indicator
  2465.     /// that a container should be formatted one-per-line (i.e. not bin-packed).
  2466.     /// So inserting a trailing comma counteracts bin-packing.
  2467.     TCS_Wrapped,
  2468.   };
  2469.  
  2470.   /// If set to ``TCS_Wrapped`` will insert trailing commas in container
  2471.   /// literals (arrays and objects) that wrap across multiple lines.
  2472.   /// It is currently only available for JavaScript
  2473.   /// and disabled by default ``TCS_None``.
  2474.   /// ``InsertTrailingCommas`` cannot be used together with ``BinPackArguments``
  2475.   /// as inserting the comma disables bin-packing.
  2476.   /// \code
  2477.   ///   TSC_Wrapped:
  2478.   ///   const someArray = [
  2479.   ///   aaaaaaaaaaaaaaaaaaaaaaaaaa,
  2480.   ///   aaaaaaaaaaaaaaaaaaaaaaaaaa,
  2481.   ///   aaaaaaaaaaaaaaaaaaaaaaaaaa,
  2482.   ///   //                        ^ inserted
  2483.   ///   ]
  2484.   /// \endcode
  2485.   /// \version 11
  2486.   TrailingCommaStyle InsertTrailingCommas;
  2487.  
  2488.   /// Separator format of integer literals of different bases.
  2489.   ///
  2490.   /// If negative, remove separators. If  ``0``, leave the literal as is. If
  2491.   /// positive, insert separators between digits starting from the rightmost
  2492.   /// digit.
  2493.   ///
  2494.   /// For example, the config below will leave separators in binary literals
  2495.   /// alone, insert separators in decimal literals to separate the digits into
  2496.   /// groups of 3, and remove separators in hexadecimal literals.
  2497.   /// \code
  2498.   ///   IntegerLiteralSeparator:
  2499.   ///     Binary: 0
  2500.   ///     Decimal: 3
  2501.   ///     Hex: -1
  2502.   /// \endcode
  2503.   ///
  2504.   /// You can also specify a minimum number of digits (``BinaryMinDigits``,
  2505.   /// ``DecimalMinDigits``, and ``HexMinDigits``) the integer literal must
  2506.   /// have in order for the separators to be inserted.
  2507.   struct IntegerLiteralSeparatorStyle {
  2508.     /// Format separators in binary literals.
  2509.     /// \code{.text}
  2510.     ///   /* -1: */ b = 0b100111101101;
  2511.     ///   /*  0: */ b = 0b10011'11'0110'1;
  2512.     ///   /*  3: */ b = 0b100'111'101'101;
  2513.     ///   /*  4: */ b = 0b1001'1110'1101;
  2514.     /// \endcode
  2515.     int8_t Binary;
  2516.     /// Format separators in binary literals with a minimum number of digits.
  2517.     /// \code{.text}
  2518.     ///   // Binary: 3
  2519.     ///   // BinaryMinDigits: 7
  2520.     ///   b1 = 0b101101;
  2521.     ///   b2 = 0b1'101'101;
  2522.     /// \endcode
  2523.     int8_t BinaryMinDigits;
  2524.     /// Format separators in decimal literals.
  2525.     /// \code{.text}
  2526.     ///   /* -1: */ d = 18446744073709550592ull;
  2527.     ///   /*  0: */ d = 184467'440737'0'95505'92ull;
  2528.     ///   /*  3: */ d = 18'446'744'073'709'550'592ull;
  2529.     /// \endcode
  2530.     int8_t Decimal;
  2531.     /// Format separators in decimal literals with a minimum number of digits.
  2532.     /// \code{.text}
  2533.     ///   // Decimal: 3
  2534.     ///   // DecimalMinDigits: 5
  2535.     ///   d1 = 2023;
  2536.     ///   d2 = 10'000;
  2537.     /// \endcode
  2538.     int8_t DecimalMinDigits;
  2539.     /// Format separators in hexadecimal literals.
  2540.     /// \code{.text}
  2541.     ///   /* -1: */ h = 0xDEADBEEFDEADBEEFuz;
  2542.     ///   /*  0: */ h = 0xDEAD'BEEF'DE'AD'BEE'Fuz;
  2543.     ///   /*  2: */ h = 0xDE'AD'BE'EF'DE'AD'BE'EFuz;
  2544.     /// \endcode
  2545.     int8_t Hex;
  2546.     /// Format separators in hexadecimal literals with a minimum number of
  2547.     /// digits.
  2548.     /// \code{.text}
  2549.     ///   // Hex: 2
  2550.     ///   // HexMinDigits: 6
  2551.     ///   h1 = 0xABCDE;
  2552.     ///   h2 = 0xAB'CD'EF;
  2553.     /// \endcode
  2554.     int8_t HexMinDigits;
  2555.     bool operator==(const IntegerLiteralSeparatorStyle &R) const {
  2556.       return Binary == R.Binary && BinaryMinDigits == R.BinaryMinDigits &&
  2557.              Decimal == R.Decimal && DecimalMinDigits == R.DecimalMinDigits &&
  2558.              Hex == R.Hex && HexMinDigits == R.HexMinDigits;
  2559.     }
  2560.   };
  2561.  
  2562.   /// Format integer literal separators (``'`` for C++ and ``_`` for C#, Java,
  2563.   /// and JavaScript).
  2564.   /// \version 16
  2565.   IntegerLiteralSeparatorStyle IntegerLiteralSeparator;
  2566.  
  2567.   /// A vector of prefixes ordered by the desired groups for Java imports.
  2568.   ///
  2569.   /// One group's prefix can be a subset of another - the longest prefix is
  2570.   /// always matched. Within a group, the imports are ordered lexicographically.
  2571.   /// Static imports are grouped separately and follow the same group rules.
  2572.   /// By default, static imports are placed before non-static imports,
  2573.   /// but this behavior is changed by another option,
  2574.   /// ``SortJavaStaticImport``.
  2575.   ///
  2576.   /// In the .clang-format configuration file, this can be configured like
  2577.   /// in the following yaml example. This will result in imports being
  2578.   /// formatted as in the Java example below.
  2579.   /// \code{.yaml}
  2580.   ///   JavaImportGroups: ['com.example', 'com', 'org']
  2581.   /// \endcode
  2582.   ///
  2583.   /// \code{.java}
  2584.   ///    import static com.example.function1;
  2585.   ///
  2586.   ///    import static com.test.function2;
  2587.   ///
  2588.   ///    import static org.example.function3;
  2589.   ///
  2590.   ///    import com.example.ClassA;
  2591.   ///    import com.example.Test;
  2592.   ///    import com.example.a.ClassB;
  2593.   ///
  2594.   ///    import com.test.ClassC;
  2595.   ///
  2596.   ///    import org.example.ClassD;
  2597.   /// \endcode
  2598.   /// \version 8
  2599.   std::vector<std::string> JavaImportGroups;
  2600.  
  2601.   /// Quotation styles for JavaScript strings. Does not affect template
  2602.   /// strings.
  2603.   enum JavaScriptQuoteStyle : int8_t {
  2604.     /// Leave string quotes as they are.
  2605.     /// \code{.js}
  2606.     ///    string1 = "foo";
  2607.     ///    string2 = 'bar';
  2608.     /// \endcode
  2609.     JSQS_Leave,
  2610.     /// Always use single quotes.
  2611.     /// \code{.js}
  2612.     ///    string1 = 'foo';
  2613.     ///    string2 = 'bar';
  2614.     /// \endcode
  2615.     JSQS_Single,
  2616.     /// Always use double quotes.
  2617.     /// \code{.js}
  2618.     ///    string1 = "foo";
  2619.     ///    string2 = "bar";
  2620.     /// \endcode
  2621.     JSQS_Double
  2622.   };
  2623.  
  2624.   /// The JavaScriptQuoteStyle to use for JavaScript strings.
  2625.   /// \version 3.9
  2626.   JavaScriptQuoteStyle JavaScriptQuotes;
  2627.  
  2628.   // clang-format off
  2629.   /// Whether to wrap JavaScript import/export statements.
  2630.   /// \code{.js}
  2631.   ///    true:
  2632.   ///    import {
  2633.   ///        VeryLongImportsAreAnnoying,
  2634.   ///        VeryLongImportsAreAnnoying,
  2635.   ///        VeryLongImportsAreAnnoying,
  2636.   ///    } from 'some/module.js'
  2637.   ///
  2638.   ///    false:
  2639.   ///    import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
  2640.   /// \endcode
  2641.   /// \version 3.9
  2642.   bool JavaScriptWrapImports;
  2643.   // clang-format on
  2644.  
  2645.   /// If true, the empty line at the start of blocks is kept.
  2646.   /// \code
  2647.   ///    true:                                  false:
  2648.   ///    if (foo) {                     vs.     if (foo) {
  2649.   ///                                             bar();
  2650.   ///      bar();                               }
  2651.   ///    }
  2652.   /// \endcode
  2653.   /// \version 3.7
  2654.   bool KeepEmptyLinesAtTheStartOfBlocks;
  2655.  
  2656.   /// Indentation logic for lambda bodies.
  2657.   enum LambdaBodyIndentationKind : int8_t {
  2658.     /// Align lambda body relative to the lambda signature. This is the default.
  2659.     /// \code
  2660.     ///    someMethod(
  2661.     ///        [](SomeReallyLongLambdaSignatureArgument foo) {
  2662.     ///          return;
  2663.     ///        });
  2664.     /// \endcode
  2665.     LBI_Signature,
  2666.     /// Align lambda body relative to the indentation level of the outer scope
  2667.     /// the lambda signature resides in.
  2668.     /// \code
  2669.     ///    someMethod(
  2670.     ///        [](SomeReallyLongLambdaSignatureArgument foo) {
  2671.     ///      return;
  2672.     ///    });
  2673.     /// \endcode
  2674.     LBI_OuterScope,
  2675.   };
  2676.  
  2677.   /// The indentation style of lambda bodies. ``Signature`` (the default)
  2678.   /// causes the lambda body to be indented one additional level relative to
  2679.   /// the indentation level of the signature. ``OuterScope`` forces the lambda
  2680.   /// body to be indented one additional level relative to the parent scope
  2681.   /// containing the lambda signature. For callback-heavy code, it may improve
  2682.   /// readability to have the signature indented two levels and to use
  2683.   /// ``OuterScope``. The KJ style guide requires ``OuterScope``.
  2684.   /// `KJ style guide
  2685.   /// <https://github.com/capnproto/capnproto/blob/master/style-guide.md>`_
  2686.   /// \version 13
  2687.   LambdaBodyIndentationKind LambdaBodyIndentation;
  2688.  
  2689.   /// Supported languages.
  2690.   ///
  2691.   /// When stored in a configuration file, specifies the language, that the
  2692.   /// configuration targets. When passed to the ``reformat()`` function, enables
  2693.   /// syntax features specific to the language.
  2694.   enum LanguageKind : int8_t {
  2695.     /// Do not use.
  2696.     LK_None,
  2697.     /// Should be used for C, C++.
  2698.     LK_Cpp,
  2699.     /// Should be used for C#.
  2700.     LK_CSharp,
  2701.     /// Should be used for Java.
  2702.     LK_Java,
  2703.     /// Should be used for JavaScript.
  2704.     LK_JavaScript,
  2705.     /// Should be used for JSON.
  2706.     LK_Json,
  2707.     /// Should be used for Objective-C, Objective-C++.
  2708.     LK_ObjC,
  2709.     /// Should be used for Protocol Buffers
  2710.     /// (https://developers.google.com/protocol-buffers/).
  2711.     LK_Proto,
  2712.     /// Should be used for TableGen code.
  2713.     LK_TableGen,
  2714.     /// Should be used for Protocol Buffer messages in text format
  2715.     /// (https://developers.google.com/protocol-buffers/).
  2716.     LK_TextProto,
  2717.     /// Should be used for Verilog and SystemVerilog.
  2718.     /// https://standards.ieee.org/ieee/1800/6700/
  2719.     /// https://sci-hub.st/10.1109/IEEESTD.2018.8299595
  2720.     LK_Verilog
  2721.   };
  2722.   bool isCpp() const { return Language == LK_Cpp || Language == LK_ObjC; }
  2723.   bool isCSharp() const { return Language == LK_CSharp; }
  2724.   bool isJson() const { return Language == LK_Json; }
  2725.   bool isJavaScript() const { return Language == LK_JavaScript; }
  2726.   bool isVerilog() const { return Language == LK_Verilog; }
  2727.   bool isProto() const { return Language == LK_Proto; }
  2728.  
  2729.   /// Language, this format style is targeted at.
  2730.   /// \version 3.5
  2731.   LanguageKind Language;
  2732.  
  2733.   /// Line ending style.
  2734.   enum LineEndingStyle : int8_t {
  2735.     /// Use ``\n``.
  2736.     LE_LF,
  2737.     /// Use ``\r\n``.
  2738.     LE_CRLF,
  2739.     /// Use ``\n`` unless the input has more lines ending in ``\r\n``.
  2740.     LE_DeriveLF,
  2741.     /// Use ``\r\n`` unless the input has more lines ending in ``\n``.
  2742.     LE_DeriveCRLF,
  2743.   };
  2744.  
  2745.   /// Line ending style (``\n`` or ``\r\n``) to use.
  2746.   /// \version 16
  2747.   LineEndingStyle LineEnding;
  2748.  
  2749.   /// A regular expression matching macros that start a block.
  2750.   /// \code
  2751.   ///    # With:
  2752.   ///    MacroBlockBegin: "^NS_MAP_BEGIN|\
  2753.   ///    NS_TABLE_HEAD$"
  2754.   ///    MacroBlockEnd: "^\
  2755.   ///    NS_MAP_END|\
  2756.   ///    NS_TABLE_.*_END$"
  2757.   ///
  2758.   ///    NS_MAP_BEGIN
  2759.   ///      foo();
  2760.   ///    NS_MAP_END
  2761.   ///
  2762.   ///    NS_TABLE_HEAD
  2763.   ///      bar();
  2764.   ///    NS_TABLE_FOO_END
  2765.   ///
  2766.   ///    # Without:
  2767.   ///    NS_MAP_BEGIN
  2768.   ///    foo();
  2769.   ///    NS_MAP_END
  2770.   ///
  2771.   ///    NS_TABLE_HEAD
  2772.   ///    bar();
  2773.   ///    NS_TABLE_FOO_END
  2774.   /// \endcode
  2775.   /// \version 3.7
  2776.   std::string MacroBlockBegin;
  2777.  
  2778.   /// A regular expression matching macros that end a block.
  2779.   /// \version 3.7
  2780.   std::string MacroBlockEnd;
  2781.  
  2782.   /// The maximum number of consecutive empty lines to keep.
  2783.   /// \code
  2784.   ///    MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
  2785.   ///    int f() {                              int f() {
  2786.   ///      int = 1;                                 int i = 1;
  2787.   ///                                               i = foo();
  2788.   ///      i = foo();                               return i;
  2789.   ///                                           }
  2790.   ///      return i;
  2791.   ///    }
  2792.   /// \endcode
  2793.   /// \version 3.7
  2794.   unsigned MaxEmptyLinesToKeep;
  2795.  
  2796.   /// Different ways to indent namespace contents.
  2797.   enum NamespaceIndentationKind : int8_t {
  2798.     /// Don't indent in namespaces.
  2799.     /// \code
  2800.     ///    namespace out {
  2801.     ///    int i;
  2802.     ///    namespace in {
  2803.     ///    int i;
  2804.     ///    }
  2805.     ///    }
  2806.     /// \endcode
  2807.     NI_None,
  2808.     /// Indent only in inner namespaces (nested in other namespaces).
  2809.     /// \code
  2810.     ///    namespace out {
  2811.     ///    int i;
  2812.     ///    namespace in {
  2813.     ///      int i;
  2814.     ///    }
  2815.     ///    }
  2816.     /// \endcode
  2817.     NI_Inner,
  2818.     /// Indent in all namespaces.
  2819.     /// \code
  2820.     ///    namespace out {
  2821.     ///      int i;
  2822.     ///      namespace in {
  2823.     ///        int i;
  2824.     ///      }
  2825.     ///    }
  2826.     /// \endcode
  2827.     NI_All
  2828.   };
  2829.  
  2830.   /// The indentation used for namespaces.
  2831.   /// \version 3.7
  2832.   NamespaceIndentationKind NamespaceIndentation;
  2833.  
  2834.   /// A vector of macros which are used to open namespace blocks.
  2835.   ///
  2836.   /// These are expected to be macros of the form:
  2837.   /// \code
  2838.   ///   NAMESPACE(<namespace-name>, ...) {
  2839.   ///     <namespace-content>
  2840.   ///   }
  2841.   /// \endcode
  2842.   ///
  2843.   /// For example: TESTSUITE
  2844.   /// \version 9
  2845.   std::vector<std::string> NamespaceMacros;
  2846.  
  2847.   /// Controls bin-packing Objective-C protocol conformance list
  2848.   /// items into as few lines as possible when they go over ``ColumnLimit``.
  2849.   ///
  2850.   /// If ``Auto`` (the default), delegates to the value in
  2851.   /// ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
  2852.   /// protocol conformance list items into as few lines as possible
  2853.   /// whenever they go over ``ColumnLimit``.
  2854.   ///
  2855.   /// If ``Always``, always bin-packs Objective-C protocol conformance
  2856.   /// list items into as few lines as possible whenever they go over
  2857.   /// ``ColumnLimit``.
  2858.   ///
  2859.   /// If ``Never``, lays out Objective-C protocol conformance list items
  2860.   /// onto individual lines whenever they go over ``ColumnLimit``.
  2861.   ///
  2862.   /// \code{.objc}
  2863.   ///    Always (or Auto, if BinPackParameters=true):
  2864.   ///    @interface ccccccccccccc () <
  2865.   ///        ccccccccccccc, ccccccccccccc,
  2866.   ///        ccccccccccccc, ccccccccccccc> {
  2867.   ///    }
  2868.   ///
  2869.   ///    Never (or Auto, if BinPackParameters=false):
  2870.   ///    @interface ddddddddddddd () <
  2871.   ///        ddddddddddddd,
  2872.   ///        ddddddddddddd,
  2873.   ///        ddddddddddddd,
  2874.   ///        ddddddddddddd> {
  2875.   ///    }
  2876.   /// \endcode
  2877.   /// \version 7
  2878.   BinPackStyle ObjCBinPackProtocolList;
  2879.  
  2880.   /// The number of characters to use for indentation of ObjC blocks.
  2881.   /// \code{.objc}
  2882.   ///    ObjCBlockIndentWidth: 4
  2883.   ///
  2884.   ///    [operation setCompletionBlock:^{
  2885.   ///        [self onOperationDone];
  2886.   ///    }];
  2887.   /// \endcode
  2888.   /// \version 3.7
  2889.   unsigned ObjCBlockIndentWidth;
  2890.  
  2891.   /// Break parameters list into lines when there is nested block
  2892.   /// parameters in a function call.
  2893.   /// \code
  2894.   ///   false:
  2895.   ///    - (void)_aMethod
  2896.   ///    {
  2897.   ///        [self.test1 t:self w:self callback:^(typeof(self) self, NSNumber
  2898.   ///        *u, NSNumber *v) {
  2899.   ///            u = c;
  2900.   ///        }]
  2901.   ///    }
  2902.   ///    true:
  2903.   ///    - (void)_aMethod
  2904.   ///    {
  2905.   ///       [self.test1 t:self
  2906.   ///                    w:self
  2907.   ///           callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
  2908.   ///                u = c;
  2909.   ///            }]
  2910.   ///    }
  2911.   /// \endcode
  2912.   /// \version 11
  2913.   bool ObjCBreakBeforeNestedBlockParam;
  2914.  
  2915.   /// Add a space after ``@property`` in Objective-C, i.e. use
  2916.   /// ``@property (readonly)`` instead of ``@property(readonly)``.
  2917.   /// \version 3.7
  2918.   bool ObjCSpaceAfterProperty;
  2919.  
  2920.   /// Add a space in front of an Objective-C protocol list, i.e. use
  2921.   /// ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
  2922.   /// \version 3.7
  2923.   bool ObjCSpaceBeforeProtocolList;
  2924.  
  2925.   /// Different ways to try to fit all constructor initializers on a line.
  2926.   enum PackConstructorInitializersStyle : int8_t {
  2927.     /// Always put each constructor initializer on its own line.
  2928.     /// \code
  2929.     ///    Constructor()
  2930.     ///        : a(),
  2931.     ///          b()
  2932.     /// \endcode
  2933.     PCIS_Never,
  2934.     /// Bin-pack constructor initializers.
  2935.     /// \code
  2936.     ///    Constructor()
  2937.     ///        : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(),
  2938.     ///          cccccccccccccccccccc()
  2939.     /// \endcode
  2940.     PCIS_BinPack,
  2941.     /// Put all constructor initializers on the current line if they fit.
  2942.     /// Otherwise, put each one on its own line.
  2943.     /// \code
  2944.     ///    Constructor() : a(), b()
  2945.     ///
  2946.     ///    Constructor()
  2947.     ///        : aaaaaaaaaaaaaaaaaaaa(),
  2948.     ///          bbbbbbbbbbbbbbbbbbbb(),
  2949.     ///          ddddddddddddd()
  2950.     /// \endcode
  2951.     PCIS_CurrentLine,
  2952.     /// Same as ``PCIS_CurrentLine`` except that if all constructor initializers
  2953.     /// do not fit on the current line, try to fit them on the next line.
  2954.     /// \code
  2955.     ///    Constructor() : a(), b()
  2956.     ///
  2957.     ///    Constructor()
  2958.     ///        : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(), ddddddddddddd()
  2959.     ///
  2960.     ///    Constructor()
  2961.     ///        : aaaaaaaaaaaaaaaaaaaa(),
  2962.     ///          bbbbbbbbbbbbbbbbbbbb(),
  2963.     ///          cccccccccccccccccccc()
  2964.     /// \endcode
  2965.     PCIS_NextLine,
  2966.   };
  2967.  
  2968.   /// The pack constructor initializers style to use.
  2969.   /// \version 14
  2970.   PackConstructorInitializersStyle PackConstructorInitializers;
  2971.  
  2972.   /// The penalty for breaking around an assignment operator.
  2973.   /// \version 5
  2974.   unsigned PenaltyBreakAssignment;
  2975.  
  2976.   /// The penalty for breaking a function call after ``call(``.
  2977.   /// \version 3.7
  2978.   unsigned PenaltyBreakBeforeFirstCallParameter;
  2979.  
  2980.   /// The penalty for each line break introduced inside a comment.
  2981.   /// \version 3.7
  2982.   unsigned PenaltyBreakComment;
  2983.  
  2984.   /// The penalty for breaking before the first ``<<``.
  2985.   /// \version 3.7
  2986.   unsigned PenaltyBreakFirstLessLess;
  2987.  
  2988.   /// The penalty for breaking after ``(``.
  2989.   /// \version 14
  2990.   unsigned PenaltyBreakOpenParenthesis;
  2991.  
  2992.   /// The penalty for each line break introduced inside a string literal.
  2993.   /// \version 3.7
  2994.   unsigned PenaltyBreakString;
  2995.  
  2996.   /// The penalty for breaking after template declaration.
  2997.   /// \version 7
  2998.   unsigned PenaltyBreakTemplateDeclaration;
  2999.  
  3000.   /// The penalty for each character outside of the column limit.
  3001.   /// \version 3.7
  3002.   unsigned PenaltyExcessCharacter;
  3003.  
  3004.   /// Penalty for each character of whitespace indentation
  3005.   /// (counted relative to leading non-whitespace column).
  3006.   /// \version 12
  3007.   unsigned PenaltyIndentedWhitespace;
  3008.  
  3009.   /// Penalty for putting the return type of a function onto its own line.
  3010.   /// \version 3.7
  3011.   unsigned PenaltyReturnTypeOnItsOwnLine;
  3012.  
  3013.   /// The ``&``, ``&&`` and ``*`` alignment style.
  3014.   enum PointerAlignmentStyle : int8_t {
  3015.     /// Align pointer to the left.
  3016.     /// \code
  3017.     ///   int* a;
  3018.     /// \endcode
  3019.     PAS_Left,
  3020.     /// Align pointer to the right.
  3021.     /// \code
  3022.     ///   int *a;
  3023.     /// \endcode
  3024.     PAS_Right,
  3025.     /// Align pointer in the middle.
  3026.     /// \code
  3027.     ///   int * a;
  3028.     /// \endcode
  3029.     PAS_Middle
  3030.   };
  3031.  
  3032.   /// Pointer and reference alignment style.
  3033.   /// \version 3.7
  3034.   PointerAlignmentStyle PointerAlignment;
  3035.  
  3036.   /// The number of columns to use for indentation of preprocessor statements.
  3037.   /// When set to -1 (default) ``IndentWidth`` is used also for preprocessor
  3038.   /// statements.
  3039.   /// \code
  3040.   ///    PPIndentWidth: 1
  3041.   ///
  3042.   ///    #ifdef __linux__
  3043.   ///    # define FOO
  3044.   ///    #else
  3045.   ///    # define BAR
  3046.   ///    #endif
  3047.   /// \endcode
  3048.   /// \version 13
  3049.   int PPIndentWidth;
  3050.  
  3051.   /// Different specifiers and qualifiers alignment styles.
  3052.   enum QualifierAlignmentStyle : int8_t {
  3053.     /// Don't change specifiers/qualifiers to either Left or Right alignment
  3054.     /// (default).
  3055.     /// \code
  3056.     ///    int const a;
  3057.     ///    const int *a;
  3058.     /// \endcode
  3059.     QAS_Leave,
  3060.     /// Change specifiers/qualifiers to be left-aligned.
  3061.     /// \code
  3062.     ///    const int a;
  3063.     ///    const int *a;
  3064.     /// \endcode
  3065.     QAS_Left,
  3066.     /// Change specifiers/qualifiers to be right-aligned.
  3067.     /// \code
  3068.     ///    int const a;
  3069.     ///    int const *a;
  3070.     /// \endcode
  3071.     QAS_Right,
  3072.     /// Change specifiers/qualifiers to be aligned based on ``QualifierOrder``.
  3073.     /// With:
  3074.     /// \code{.yaml}
  3075.     ///   QualifierOrder: ['inline', 'static', 'type', 'const']
  3076.     /// \endcode
  3077.     ///
  3078.     /// \code
  3079.     ///
  3080.     ///    int const a;
  3081.     ///    int const *a;
  3082.     /// \endcode
  3083.     QAS_Custom
  3084.   };
  3085.  
  3086.   /// Different ways to arrange specifiers and qualifiers (e.g. const/volatile).
  3087.   /// \warning
  3088.   ///  Setting ``QualifierAlignment``  to something other than `Leave`, COULD
  3089.   ///  lead to incorrect code formatting due to incorrect decisions made due to
  3090.   ///  clang-formats lack of complete semantic information.
  3091.   ///  As such extra care should be taken to review code changes made by the use
  3092.   ///  of this option.
  3093.   /// \endwarning
  3094.   /// \version 14
  3095.   QualifierAlignmentStyle QualifierAlignment;
  3096.  
  3097.   /// The order in which the qualifiers appear.
  3098.   /// Order is an array that can contain any of the following:
  3099.   ///
  3100.   ///   * const
  3101.   ///   * inline
  3102.   ///   * static
  3103.   ///   * friend
  3104.   ///   * constexpr
  3105.   ///   * volatile
  3106.   ///   * restrict
  3107.   ///   * type
  3108.   ///
  3109.   /// Note: it MUST contain 'type'.
  3110.   /// Items to the left of 'type' will be placed to the left of the type and
  3111.   /// aligned in the order supplied. Items to the right of 'type' will be placed
  3112.   /// to the right of the type and aligned in the order supplied.
  3113.   ///
  3114.   /// \code{.yaml}
  3115.   ///   QualifierOrder: ['inline', 'static', 'type', 'const', 'volatile' ]
  3116.   /// \endcode
  3117.   /// \version 14
  3118.   std::vector<std::string> QualifierOrder;
  3119.  
  3120.   /// See documentation of ``RawStringFormats``.
  3121.   struct RawStringFormat {
  3122.     /// The language of this raw string.
  3123.     LanguageKind Language;
  3124.     /// A list of raw string delimiters that match this language.
  3125.     std::vector<std::string> Delimiters;
  3126.     /// A list of enclosing function names that match this language.
  3127.     std::vector<std::string> EnclosingFunctions;
  3128.     /// The canonical delimiter for this language.
  3129.     std::string CanonicalDelimiter;
  3130.     /// The style name on which this raw string format is based on.
  3131.     /// If not specified, the raw string format is based on the style that this
  3132.     /// format is based on.
  3133.     std::string BasedOnStyle;
  3134.     bool operator==(const RawStringFormat &Other) const {
  3135.       return Language == Other.Language && Delimiters == Other.Delimiters &&
  3136.              EnclosingFunctions == Other.EnclosingFunctions &&
  3137.              CanonicalDelimiter == Other.CanonicalDelimiter &&
  3138.              BasedOnStyle == Other.BasedOnStyle;
  3139.     }
  3140.   };
  3141.  
  3142.   /// Defines hints for detecting supported languages code blocks in raw
  3143.   /// strings.
  3144.   ///
  3145.   /// A raw string with a matching delimiter or a matching enclosing function
  3146.   /// name will be reformatted assuming the specified language based on the
  3147.   /// style for that language defined in the .clang-format file. If no style has
  3148.   /// been defined in the .clang-format file for the specific language, a
  3149.   /// predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
  3150.   /// found, the formatting is based on llvm style. A matching delimiter takes
  3151.   /// precedence over a matching enclosing function name for determining the
  3152.   /// language of the raw string contents.
  3153.   ///
  3154.   /// If a canonical delimiter is specified, occurrences of other delimiters for
  3155.   /// the same language will be updated to the canonical if possible.
  3156.   ///
  3157.   /// There should be at most one specification per language and each delimiter
  3158.   /// and enclosing function should not occur in multiple specifications.
  3159.   ///
  3160.   /// To configure this in the .clang-format file, use:
  3161.   /// \code{.yaml}
  3162.   ///   RawStringFormats:
  3163.   ///     - Language: TextProto
  3164.   ///         Delimiters:
  3165.   ///           - 'pb'
  3166.   ///           - 'proto'
  3167.   ///         EnclosingFunctions:
  3168.   ///           - 'PARSE_TEXT_PROTO'
  3169.   ///         BasedOnStyle: google
  3170.   ///     - Language: Cpp
  3171.   ///         Delimiters:
  3172.   ///           - 'cc'
  3173.   ///           - 'cpp'
  3174.   ///         BasedOnStyle: llvm
  3175.   ///         CanonicalDelimiter: 'cc'
  3176.   /// \endcode
  3177.   /// \version 6
  3178.   std::vector<RawStringFormat> RawStringFormats;
  3179.  
  3180.   /// \brief The ``&`` and ``&&`` alignment style.
  3181.   enum ReferenceAlignmentStyle : int8_t {
  3182.     /// Align reference like ``PointerAlignment``.
  3183.     RAS_Pointer,
  3184.     /// Align reference to the left.
  3185.     /// \code
  3186.     ///   int& a;
  3187.     /// \endcode
  3188.     RAS_Left,
  3189.     /// Align reference to the right.
  3190.     /// \code
  3191.     ///   int &a;
  3192.     /// \endcode
  3193.     RAS_Right,
  3194.     /// Align reference in the middle.
  3195.     /// \code
  3196.     ///   int & a;
  3197.     /// \endcode
  3198.     RAS_Middle
  3199.   };
  3200.  
  3201.   /// \brief Reference alignment style (overrides ``PointerAlignment`` for
  3202.   /// references).
  3203.   /// \version 13
  3204.   ReferenceAlignmentStyle ReferenceAlignment;
  3205.  
  3206.   // clang-format off
  3207.   /// If ``true``, clang-format will attempt to re-flow comments. That is it
  3208.   /// will touch a comment and *reflow* long comments into new lines, trying to
  3209.   /// obey the ``ColumnLimit``.
  3210.   /// \code
  3211.   ///    false:
  3212.   ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
  3213.   ///    /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
  3214.   ///
  3215.   ///    true:
  3216.   ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
  3217.   ///    // information
  3218.   ///    /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
  3219.   ///     * information */
  3220.   /// \endcode
  3221.   /// \version 3.8
  3222.   bool ReflowComments;
  3223.   // clang-format on
  3224.  
  3225.   /// Remove optional braces of control statements (``if``, ``else``, ``for``,
  3226.   /// and ``while``) in C++ according to the LLVM coding style.
  3227.   /// \warning
  3228.   ///  This option will be renamed and expanded to support other styles.
  3229.   /// \endwarning
  3230.   /// \warning
  3231.   ///  Setting this option to `true` could lead to incorrect code formatting due
  3232.   ///  to clang-format's lack of complete semantic information. As such, extra
  3233.   ///  care should be taken to review code changes made by this option.
  3234.   /// \endwarning
  3235.   /// \code
  3236.   ///   false:                                     true:
  3237.   ///
  3238.   ///   if (isa<FunctionDecl>(D)) {        vs.     if (isa<FunctionDecl>(D))
  3239.   ///     handleFunctionDecl(D);                     handleFunctionDecl(D);
  3240.   ///   } else if (isa<VarDecl>(D)) {              else if (isa<VarDecl>(D))
  3241.   ///     handleVarDecl(D);                          handleVarDecl(D);
  3242.   ///   }
  3243.   ///
  3244.   ///   if (isa<VarDecl>(D)) {             vs.     if (isa<VarDecl>(D)) {
  3245.   ///     for (auto *A : D.attrs()) {                for (auto *A : D.attrs())
  3246.   ///       if (shouldProcessAttr(A)) {                if (shouldProcessAttr(A))
  3247.   ///         handleAttr(A);                             handleAttr(A);
  3248.   ///       }                                      }
  3249.   ///     }
  3250.   ///   }
  3251.   ///
  3252.   ///   if (isa<FunctionDecl>(D)) {        vs.     if (isa<FunctionDecl>(D))
  3253.   ///     for (auto *A : D.attrs()) {                for (auto *A : D.attrs())
  3254.   ///       handleAttr(A);                             handleAttr(A);
  3255.   ///     }
  3256.   ///   }
  3257.   ///
  3258.   ///   if (auto *D = (T)(D)) {            vs.     if (auto *D = (T)(D)) {
  3259.   ///     if (shouldProcess(D)) {                    if (shouldProcess(D))
  3260.   ///       handleVarDecl(D);                          handleVarDecl(D);
  3261.   ///     } else {                                   else
  3262.   ///       markAsIgnored(D);                          markAsIgnored(D);
  3263.   ///     }                                        }
  3264.   ///   }
  3265.   ///
  3266.   ///   if (a) {                           vs.     if (a)
  3267.   ///     b();                                       b();
  3268.   ///   } else {                                   else if (c)
  3269.   ///     if (c) {                                   d();
  3270.   ///       d();                                   else
  3271.   ///     } else {                                   e();
  3272.   ///       e();
  3273.   ///     }
  3274.   ///   }
  3275.   /// \endcode
  3276.   /// \version 14
  3277.   bool RemoveBracesLLVM;
  3278.  
  3279.   /// Remove semicolons after the closing brace of a non-empty function.
  3280.   /// \warning
  3281.   ///  Setting this option to `true` could lead to incorrect code formatting due
  3282.   ///  to clang-format's lack of complete semantic information. As such, extra
  3283.   ///  care should be taken to review code changes made by this option.
  3284.   /// \endwarning
  3285.   /// \code
  3286.   ///   false:                                     true:
  3287.   ///
  3288.   ///   int max(int a, int b) {                    int max(int a, int b) {
  3289.   ///     return a > b ? a : b;                      return a > b ? a : b;
  3290.   ///   };                                         }
  3291.   ///
  3292.   /// \endcode
  3293.   /// \version 16
  3294.   bool RemoveSemicolon;
  3295.  
  3296.   /// \brief The possible positions for the requires clause. The
  3297.   /// ``IndentRequires`` option is only used if the ``requires`` is put on the
  3298.   /// start of a line.
  3299.   enum RequiresClausePositionStyle : int8_t {
  3300.     /// Always put the ``requires`` clause on its own line.
  3301.     /// \code
  3302.     ///   template <typename T>
  3303.     ///   requires C<T>
  3304.     ///   struct Foo {...
  3305.     ///
  3306.     ///   template <typename T>
  3307.     ///   requires C<T>
  3308.     ///   void bar(T t) {...
  3309.     ///
  3310.     ///   template <typename T>
  3311.     ///   void baz(T t)
  3312.     ///   requires C<T>
  3313.     ///   {...
  3314.     /// \endcode
  3315.     RCPS_OwnLine,
  3316.     /// Try to put the clause together with the preceding part of a declaration.
  3317.     /// For class templates: stick to the template declaration.
  3318.     /// For function templates: stick to the template declaration.
  3319.     /// For function declaration followed by a requires clause: stick to the
  3320.     /// parameter list.
  3321.     /// \code
  3322.     ///   template <typename T> requires C<T>
  3323.     ///   struct Foo {...
  3324.     ///
  3325.     ///   template <typename T> requires C<T>
  3326.     ///   void bar(T t) {...
  3327.     ///
  3328.     ///   template <typename T>
  3329.     ///   void baz(T t) requires C<T>
  3330.     ///   {...
  3331.     /// \endcode
  3332.     RCPS_WithPreceding,
  3333.     /// Try to put the ``requires`` clause together with the class or function
  3334.     /// declaration.
  3335.     /// \code
  3336.     ///   template <typename T>
  3337.     ///   requires C<T> struct Foo {...
  3338.     ///
  3339.     ///   template <typename T>
  3340.     ///   requires C<T> void bar(T t) {...
  3341.     ///
  3342.     ///   template <typename T>
  3343.     ///   void baz(T t)
  3344.     ///   requires C<T> {...
  3345.     /// \endcode
  3346.     RCPS_WithFollowing,
  3347.     /// Try to put everything in the same line if possible. Otherwise normal
  3348.     /// line breaking rules take over.
  3349.     /// \code
  3350.     ///   // Fitting:
  3351.     ///   template <typename T> requires C<T> struct Foo {...
  3352.     ///
  3353.     ///   template <typename T> requires C<T> void bar(T t) {...
  3354.     ///
  3355.     ///   template <typename T> void bar(T t) requires C<T> {...
  3356.     ///
  3357.     ///   // Not fitting, one possible example:
  3358.     ///   template <typename LongName>
  3359.     ///   requires C<LongName>
  3360.     ///   struct Foo {...
  3361.     ///
  3362.     ///   template <typename LongName>
  3363.     ///   requires C<LongName>
  3364.     ///   void bar(LongName ln) {
  3365.     ///
  3366.     ///   template <typename LongName>
  3367.     ///   void bar(LongName ln)
  3368.     ///       requires C<LongName> {
  3369.     /// \endcode
  3370.     RCPS_SingleLine,
  3371.   };
  3372.  
  3373.   /// \brief The position of the ``requires`` clause.
  3374.   /// \version 15
  3375.   RequiresClausePositionStyle RequiresClausePosition;
  3376.  
  3377.   /// Indentation logic for requires expression bodies.
  3378.   enum RequiresExpressionIndentationKind : int8_t {
  3379.     /// Align requires expression body relative to the indentation level of the
  3380.     /// outer scope the requires expression resides in.
  3381.     /// This is the default.
  3382.     /// \code
  3383.     ///    template <typename T>
  3384.     ///    concept C = requires(T t) {
  3385.     ///      ...
  3386.     ///    }
  3387.     /// \endcode
  3388.     REI_OuterScope,
  3389.     /// Align requires expression body relative to the `requires` keyword.
  3390.     /// \code
  3391.     ///    template <typename T>
  3392.     ///    concept C = requires(T t) {
  3393.     ///                  ...
  3394.     ///                }
  3395.     /// \endcode
  3396.     REI_Keyword,
  3397.   };
  3398.  
  3399.   /// The indentation used for requires expression bodies.
  3400.   /// \version 16
  3401.   RequiresExpressionIndentationKind RequiresExpressionIndentation;
  3402.  
  3403.   /// \brief The style if definition blocks should be separated.
  3404.   enum SeparateDefinitionStyle : int8_t {
  3405.     /// Leave definition blocks as they are.
  3406.     SDS_Leave,
  3407.     /// Insert an empty line between definition blocks.
  3408.     SDS_Always,
  3409.     /// Remove any empty line between definition blocks.
  3410.     SDS_Never
  3411.   };
  3412.  
  3413.   /// Specifies the use of empty lines to separate definition blocks, including
  3414.   /// classes, structs, enums, and functions.
  3415.   /// \code
  3416.   ///    Never                  v.s.     Always
  3417.   ///    #include <cstring>              #include <cstring>
  3418.   ///    struct Foo {
  3419.   ///      int a, b, c;                  struct Foo {
  3420.   ///    };                                int a, b, c;
  3421.   ///    namespace Ns {                  };
  3422.   ///    class Bar {
  3423.   ///    public:                         namespace Ns {
  3424.   ///      struct Foobar {               class Bar {
  3425.   ///        int a;                      public:
  3426.   ///        int b;                        struct Foobar {
  3427.   ///      };                                int a;
  3428.   ///    private:                            int b;
  3429.   ///      int t;                          };
  3430.   ///      int method1() {
  3431.   ///        // ...                      private:
  3432.   ///      }                               int t;
  3433.   ///      enum List {
  3434.   ///        ITEM1,                        int method1() {
  3435.   ///        ITEM2                           // ...
  3436.   ///      };                              }
  3437.   ///      template<typename T>
  3438.   ///      int method2(T x) {              enum List {
  3439.   ///        // ...                          ITEM1,
  3440.   ///      }                                 ITEM2
  3441.   ///      int i, j, k;                    };
  3442.   ///      int method3(int par) {
  3443.   ///        // ...                        template<typename T>
  3444.   ///      }                               int method2(T x) {
  3445.   ///    };                                  // ...
  3446.   ///    class C {};                       }
  3447.   ///    }
  3448.   ///                                      int i, j, k;
  3449.   ///
  3450.   ///                                      int method3(int par) {
  3451.   ///                                        // ...
  3452.   ///                                      }
  3453.   ///                                    };
  3454.   ///
  3455.   ///                                    class C {};
  3456.   ///                                    }
  3457.   /// \endcode
  3458.   /// \version 14
  3459.   SeparateDefinitionStyle SeparateDefinitionBlocks;
  3460.  
  3461.   /// The maximal number of unwrapped lines that a short namespace spans.
  3462.   /// Defaults to 1.
  3463.   ///
  3464.   /// This determines the maximum length of short namespaces by counting
  3465.   /// unwrapped lines (i.e. containing neither opening nor closing
  3466.   /// namespace brace) and makes "FixNamespaceComments" omit adding
  3467.   /// end comments for those.
  3468.   /// \code
  3469.   ///    ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
  3470.   ///    namespace a {                      namespace a {
  3471.   ///      int foo;                           int foo;
  3472.   ///    }                                  } // namespace a
  3473.   ///
  3474.   ///    ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
  3475.   ///    namespace b {                      namespace b {
  3476.   ///      int foo;                           int foo;
  3477.   ///      int bar;                           int bar;
  3478.   ///    } // namespace b                   } // namespace b
  3479.   /// \endcode
  3480.   /// \version 13
  3481.   unsigned ShortNamespaceLines;
  3482.  
  3483.   /// Include sorting options.
  3484.   enum SortIncludesOptions : int8_t {
  3485.     /// Includes are never sorted.
  3486.     /// \code
  3487.     ///    #include "B/A.h"
  3488.     ///    #include "A/B.h"
  3489.     ///    #include "a/b.h"
  3490.     ///    #include "A/b.h"
  3491.     ///    #include "B/a.h"
  3492.     /// \endcode
  3493.     SI_Never,
  3494.     /// Includes are sorted in an ASCIIbetical or case sensitive fashion.
  3495.     /// \code
  3496.     ///    #include "A/B.h"
  3497.     ///    #include "A/b.h"
  3498.     ///    #include "B/A.h"
  3499.     ///    #include "B/a.h"
  3500.     ///    #include "a/b.h"
  3501.     /// \endcode
  3502.     SI_CaseSensitive,
  3503.     /// Includes are sorted in an alphabetical or case insensitive fashion.
  3504.     /// \code
  3505.     ///    #include "A/B.h"
  3506.     ///    #include "A/b.h"
  3507.     ///    #include "a/b.h"
  3508.     ///    #include "B/A.h"
  3509.     ///    #include "B/a.h"
  3510.     /// \endcode
  3511.     SI_CaseInsensitive,
  3512.   };
  3513.  
  3514.   /// Controls if and how clang-format will sort ``#includes``.
  3515.   /// If ``Never``, includes are never sorted.
  3516.   /// If ``CaseInsensitive``, includes are sorted in an ASCIIbetical or case
  3517.   /// insensitive fashion.
  3518.   /// If ``CaseSensitive``, includes are sorted in an alphabetical or case
  3519.   /// sensitive fashion.
  3520.   /// \version 3.8
  3521.   SortIncludesOptions SortIncludes;
  3522.  
  3523.   /// Position for Java Static imports.
  3524.   enum SortJavaStaticImportOptions : int8_t {
  3525.     /// Static imports are placed before non-static imports.
  3526.     /// \code{.java}
  3527.     ///   import static org.example.function1;
  3528.     ///
  3529.     ///   import org.example.ClassA;
  3530.     /// \endcode
  3531.     SJSIO_Before,
  3532.     /// Static imports are placed after non-static imports.
  3533.     /// \code{.java}
  3534.     ///   import org.example.ClassA;
  3535.     ///
  3536.     ///   import static org.example.function1;
  3537.     /// \endcode
  3538.     SJSIO_After,
  3539.   };
  3540.  
  3541.   /// When sorting Java imports, by default static imports are placed before
  3542.   /// non-static imports. If ``JavaStaticImportAfterImport`` is ``After``,
  3543.   /// static imports are placed after non-static imports.
  3544.   /// \version 12
  3545.   SortJavaStaticImportOptions SortJavaStaticImport;
  3546.  
  3547.   /// Using declaration sorting options.
  3548.   enum SortUsingDeclarationsOptions : int8_t {
  3549.     /// Using declarations are never sorted.
  3550.     /// \code
  3551.     ///    using std::chrono::duration_cast;
  3552.     ///    using std::move;
  3553.     ///    using boost::regex;
  3554.     ///    using boost::regex_constants::icase;
  3555.     ///    using std::string;
  3556.     /// \endcode
  3557.     SUD_Never,
  3558.     /// Using declarations are sorted in the order defined as follows:
  3559.     /// Split the strings by "::" and discard any initial empty strings. Sort
  3560.     /// the lists of names lexicographically, and within those groups, names are
  3561.     /// in case-insensitive lexicographic order.
  3562.     /// \code
  3563.     ///    using boost::regex;
  3564.     ///    using boost::regex_constants::icase;
  3565.     ///    using std::chrono::duration_cast;
  3566.     ///    using std::move;
  3567.     ///    using std::string;
  3568.     /// \endcode
  3569.     SUD_Lexicographic,
  3570.     /// Using declarations are sorted in the order defined as follows:
  3571.     /// Split the strings by "::" and discard any initial empty strings. The
  3572.     /// last element of each list is a non-namespace name; all others are
  3573.     /// namespace names. Sort the lists of names lexicographically, where the
  3574.     /// sort order of individual names is that all non-namespace names come
  3575.     /// before all namespace names, and within those groups, names are in
  3576.     /// case-insensitive lexicographic order.
  3577.     /// \code
  3578.     ///    using boost::regex;
  3579.     ///    using boost::regex_constants::icase;
  3580.     ///    using std::move;
  3581.     ///    using std::string;
  3582.     ///    using std::chrono::duration_cast;
  3583.     /// \endcode
  3584.     SUD_LexicographicNumeric,
  3585.   };
  3586.  
  3587.   /// Controls if and how clang-format will sort using declarations.
  3588.   /// \version 5
  3589.   SortUsingDeclarationsOptions SortUsingDeclarations;
  3590.  
  3591.   /// If ``true``, a space is inserted after C style casts.
  3592.   /// \code
  3593.   ///    true:                                  false:
  3594.   ///    (int) i;                       vs.     (int)i;
  3595.   /// \endcode
  3596.   /// \version 3.5
  3597.   bool SpaceAfterCStyleCast;
  3598.  
  3599.   /// If ``true``, a space is inserted after the logical not operator (``!``).
  3600.   /// \code
  3601.   ///    true:                                  false:
  3602.   ///    ! someExpression();            vs.     !someExpression();
  3603.   /// \endcode
  3604.   /// \version 9
  3605.   bool SpaceAfterLogicalNot;
  3606.  
  3607.   /// If \c true, a space will be inserted after the 'template' keyword.
  3608.   /// \code
  3609.   ///    true:                                  false:
  3610.   ///    template <int> void foo();     vs.     template<int> void foo();
  3611.   /// \endcode
  3612.   /// \version 4
  3613.   bool SpaceAfterTemplateKeyword;
  3614.  
  3615.   /// Different ways to put a space before opening parentheses.
  3616.   enum SpaceAroundPointerQualifiersStyle : int8_t {
  3617.     /// Don't ensure spaces around pointer qualifiers and use PointerAlignment
  3618.     /// instead.
  3619.     /// \code
  3620.     ///    PointerAlignment: Left                 PointerAlignment: Right
  3621.     ///    void* const* x = NULL;         vs.     void *const *x = NULL;
  3622.     /// \endcode
  3623.     SAPQ_Default,
  3624.     /// Ensure that there is a space before pointer qualifiers.
  3625.     /// \code
  3626.     ///    PointerAlignment: Left                 PointerAlignment: Right
  3627.     ///    void* const* x = NULL;         vs.     void * const *x = NULL;
  3628.     /// \endcode
  3629.     SAPQ_Before,
  3630.     /// Ensure that there is a space after pointer qualifiers.
  3631.     /// \code
  3632.     ///    PointerAlignment: Left                 PointerAlignment: Right
  3633.     ///    void* const * x = NULL;         vs.     void *const *x = NULL;
  3634.     /// \endcode
  3635.     SAPQ_After,
  3636.     /// Ensure that there is a space both before and after pointer qualifiers.
  3637.     /// \code
  3638.     ///    PointerAlignment: Left                 PointerAlignment: Right
  3639.     ///    void* const * x = NULL;         vs.     void * const *x = NULL;
  3640.     /// \endcode
  3641.     SAPQ_Both,
  3642.   };
  3643.  
  3644.   ///  Defines in which cases to put a space before or after pointer qualifiers
  3645.   /// \version 12
  3646.   SpaceAroundPointerQualifiersStyle SpaceAroundPointerQualifiers;
  3647.  
  3648.   /// If ``false``, spaces will be removed before assignment operators.
  3649.   /// \code
  3650.   ///    true:                                  false:
  3651.   ///    int a = 5;                     vs.     int a= 5;
  3652.   ///    a += 42;                               a+= 42;
  3653.   /// \endcode
  3654.   /// \version 3.7
  3655.   bool SpaceBeforeAssignmentOperators;
  3656.  
  3657.   /// If ``false``, spaces will be removed before case colon.
  3658.   /// \code
  3659.   ///   true:                                   false
  3660.   ///   switch (x) {                    vs.     switch (x) {
  3661.   ///     case 1 : break;                         case 1: break;
  3662.   ///   }                                       }
  3663.   /// \endcode
  3664.   /// \version 12
  3665.   bool SpaceBeforeCaseColon;
  3666.  
  3667.   /// If ``true``, a space will be inserted before a C++11 braced list
  3668.   /// used to initialize an object (after the preceding identifier or type).
  3669.   /// \code
  3670.   ///    true:                                  false:
  3671.   ///    Foo foo { bar };               vs.     Foo foo{ bar };
  3672.   ///    Foo {};                                Foo{};
  3673.   ///    vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
  3674.   ///    new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
  3675.   /// \endcode
  3676.   /// \version 7
  3677.   bool SpaceBeforeCpp11BracedList;
  3678.  
  3679.   /// If ``false``, spaces will be removed before constructor initializer
  3680.   /// colon.
  3681.   /// \code
  3682.   ///    true:                                  false:
  3683.   ///    Foo::Foo() : a(a) {}                   Foo::Foo(): a(a) {}
  3684.   /// \endcode
  3685.   /// \version 7
  3686.   bool SpaceBeforeCtorInitializerColon;
  3687.  
  3688.   /// If ``false``, spaces will be removed before inheritance colon.
  3689.   /// \code
  3690.   ///    true:                                  false:
  3691.   ///    class Foo : Bar {}             vs.     class Foo: Bar {}
  3692.   /// \endcode
  3693.   /// \version 7
  3694.   bool SpaceBeforeInheritanceColon;
  3695.  
  3696.   /// Different ways to put a space before opening parentheses.
  3697.   enum SpaceBeforeParensStyle : int8_t {
  3698.     /// Never put a space before opening parentheses.
  3699.     /// \code
  3700.     ///    void f() {
  3701.     ///      if(true) {
  3702.     ///        f();
  3703.     ///      }
  3704.     ///    }
  3705.     /// \endcode
  3706.     SBPO_Never,
  3707.     /// Put a space before opening parentheses only after control statement
  3708.     /// keywords (``for/if/while...``).
  3709.     /// \code
  3710.     ///    void f() {
  3711.     ///      if (true) {
  3712.     ///        f();
  3713.     ///      }
  3714.     ///    }
  3715.     /// \endcode
  3716.     SBPO_ControlStatements,
  3717.     /// Same as ``SBPO_ControlStatements`` except this option doesn't apply to
  3718.     /// ForEach and If macros. This is useful in projects where ForEach/If
  3719.     /// macros are treated as function calls instead of control statements.
  3720.     /// ``SBPO_ControlStatementsExceptForEachMacros`` remains an alias for
  3721.     /// backward compatibility.
  3722.     /// \code
  3723.     ///    void f() {
  3724.     ///      Q_FOREACH(...) {
  3725.     ///        f();
  3726.     ///      }
  3727.     ///    }
  3728.     /// \endcode
  3729.     SBPO_ControlStatementsExceptControlMacros,
  3730.     /// Put a space before opening parentheses only if the parentheses are not
  3731.     /// empty i.e. '()'
  3732.     /// \code
  3733.     ///   void() {
  3734.     ///     if (true) {
  3735.     ///       f();
  3736.     ///       g (x, y, z);
  3737.     ///     }
  3738.     ///   }
  3739.     /// \endcode
  3740.     SBPO_NonEmptyParentheses,
  3741.     /// Always put a space before opening parentheses, except when it's
  3742.     /// prohibited by the syntax rules (in function-like macro definitions) or
  3743.     /// when determined by other style rules (after unary operators, opening
  3744.     /// parentheses, etc.)
  3745.     /// \code
  3746.     ///    void f () {
  3747.     ///      if (true) {
  3748.     ///        f ();
  3749.     ///      }
  3750.     ///    }
  3751.     /// \endcode
  3752.     SBPO_Always,
  3753.     /// Configure each individual space before parentheses in
  3754.     /// `SpaceBeforeParensOptions`.
  3755.     SBPO_Custom,
  3756.   };
  3757.  
  3758.   /// Defines in which cases to put a space before opening parentheses.
  3759.   /// \version 3.5
  3760.   SpaceBeforeParensStyle SpaceBeforeParens;
  3761.  
  3762.   /// Precise control over the spacing before parentheses.
  3763.   /// \code
  3764.   ///   # Should be declared this way:
  3765.   ///   SpaceBeforeParens: Custom
  3766.   ///   SpaceBeforeParensOptions:
  3767.   ///     AfterControlStatements: true
  3768.   ///     AfterFunctionDefinitionName: true
  3769.   /// \endcode
  3770.   struct SpaceBeforeParensCustom {
  3771.     /// If ``true``, put space betwee control statement keywords
  3772.     /// (for/if/while...) and opening parentheses.
  3773.     /// \code
  3774.     ///    true:                                  false:
  3775.     ///    if (...) {}                     vs.    if(...) {}
  3776.     /// \endcode
  3777.     bool AfterControlStatements;
  3778.     /// If ``true``, put space between foreach macros and opening parentheses.
  3779.     /// \code
  3780.     ///    true:                                  false:
  3781.     ///    FOREACH (...)                   vs.    FOREACH(...)
  3782.     ///      <loop-body>                            <loop-body>
  3783.     /// \endcode
  3784.     bool AfterForeachMacros;
  3785.     /// If ``true``, put a space between function declaration name and opening
  3786.     /// parentheses.
  3787.     /// \code
  3788.     ///    true:                                  false:
  3789.     ///    void f ();                      vs.    void f();
  3790.     /// \endcode
  3791.     bool AfterFunctionDeclarationName;
  3792.     /// If ``true``, put a space between function definition name and opening
  3793.     /// parentheses.
  3794.     /// \code
  3795.     ///    true:                                  false:
  3796.     ///    void f () {}                    vs.    void f() {}
  3797.     /// \endcode
  3798.     bool AfterFunctionDefinitionName;
  3799.     /// If ``true``, put space between if macros and opening parentheses.
  3800.     /// \code
  3801.     ///    true:                                  false:
  3802.     ///    IF (...)                        vs.    IF(...)
  3803.     ///      <conditional-body>                     <conditional-body>
  3804.     /// \endcode
  3805.     bool AfterIfMacros;
  3806.     /// If ``true``, put a space between operator overloading and opening
  3807.     /// parentheses.
  3808.     /// \code
  3809.     ///    true:                                  false:
  3810.     ///    void operator++ (int a);        vs.    void operator++(int a);
  3811.     ///    object.operator++ (10);                object.operator++(10);
  3812.     /// \endcode
  3813.     bool AfterOverloadedOperator;
  3814.     /// If ``true``, put space between requires keyword in a requires clause and
  3815.     /// opening parentheses, if there is one.
  3816.     /// \code
  3817.     ///    true:                                  false:
  3818.     ///    template<typename T>            vs.    template<typename T>
  3819.     ///    requires (A<T> && B<T>)                requires(A<T> && B<T>)
  3820.     ///    ...                                    ...
  3821.     /// \endcode
  3822.     bool AfterRequiresInClause;
  3823.     /// If ``true``, put space between requires keyword in a requires expression
  3824.     /// and opening parentheses.
  3825.     /// \code
  3826.     ///    true:                                  false:
  3827.     ///    template<typename T>            vs.    template<typename T>
  3828.     ///    concept C = requires (T t) {           concept C = requires(T t) {
  3829.     ///                  ...                                    ...
  3830.     ///                }                                      }
  3831.     /// \endcode
  3832.     bool AfterRequiresInExpression;
  3833.     /// If ``true``, put a space before opening parentheses only if the
  3834.     /// parentheses are not empty.
  3835.     /// \code
  3836.     ///    true:                                  false:
  3837.     ///    void f (int a);                 vs.    void f();
  3838.     ///    f (a);                                 f();
  3839.     /// \endcode
  3840.     bool BeforeNonEmptyParentheses;
  3841.  
  3842.     SpaceBeforeParensCustom()
  3843.         : AfterControlStatements(false), AfterForeachMacros(false),
  3844.           AfterFunctionDeclarationName(false),
  3845.           AfterFunctionDefinitionName(false), AfterIfMacros(false),
  3846.           AfterOverloadedOperator(false), AfterRequiresInClause(false),
  3847.           AfterRequiresInExpression(false), BeforeNonEmptyParentheses(false) {}
  3848.  
  3849.     bool operator==(const SpaceBeforeParensCustom &Other) const {
  3850.       return AfterControlStatements == Other.AfterControlStatements &&
  3851.              AfterForeachMacros == Other.AfterForeachMacros &&
  3852.              AfterFunctionDeclarationName ==
  3853.                  Other.AfterFunctionDeclarationName &&
  3854.              AfterFunctionDefinitionName == Other.AfterFunctionDefinitionName &&
  3855.              AfterIfMacros == Other.AfterIfMacros &&
  3856.              AfterOverloadedOperator == Other.AfterOverloadedOperator &&
  3857.              AfterRequiresInClause == Other.AfterRequiresInClause &&
  3858.              AfterRequiresInExpression == Other.AfterRequiresInExpression &&
  3859.              BeforeNonEmptyParentheses == Other.BeforeNonEmptyParentheses;
  3860.     }
  3861.   };
  3862.  
  3863.   /// Control of individual space before parentheses.
  3864.   ///
  3865.   /// If ``SpaceBeforeParens`` is set to ``Custom``, use this to specify
  3866.   /// how each individual space before parentheses case should be handled.
  3867.   /// Otherwise, this is ignored.
  3868.   /// \code{.yaml}
  3869.   ///   # Example of usage:
  3870.   ///   SpaceBeforeParens: Custom
  3871.   ///   SpaceBeforeParensOptions:
  3872.   ///     AfterControlStatements: true
  3873.   ///     AfterFunctionDefinitionName: true
  3874.   /// \endcode
  3875.   /// \version 14
  3876.   SpaceBeforeParensCustom SpaceBeforeParensOptions;
  3877.  
  3878.   /// If ``true``, spaces will be before  ``[``.
  3879.   /// Lambdas will not be affected. Only the first ``[`` will get a space added.
  3880.   /// \code
  3881.   ///    true:                                  false:
  3882.   ///    int a [5];                    vs.      int a[5];
  3883.   ///    int a [5][5];                 vs.      int a[5][5];
  3884.   /// \endcode
  3885.   /// \version 10
  3886.   bool SpaceBeforeSquareBrackets;
  3887.  
  3888.   /// If ``false``, spaces will be removed before range-based for loop
  3889.   /// colon.
  3890.   /// \code
  3891.   ///    true:                                  false:
  3892.   ///    for (auto v : values) {}       vs.     for(auto v: values) {}
  3893.   /// \endcode
  3894.   /// \version 7
  3895.   bool SpaceBeforeRangeBasedForLoopColon;
  3896.  
  3897.   /// If ``true``, spaces will be inserted into ``{}``.
  3898.   /// \code
  3899.   ///    true:                                false:
  3900.   ///    void f() { }                   vs.   void f() {}
  3901.   ///    while (true) { }                     while (true) {}
  3902.   /// \endcode
  3903.   /// \version 10
  3904.   bool SpaceInEmptyBlock;
  3905.  
  3906.   /// If ``true``, spaces may be inserted into ``()``.
  3907.   /// \code
  3908.   ///    true:                                false:
  3909.   ///    void f( ) {                    vs.   void f() {
  3910.   ///      int x[] = {foo( ), bar( )};          int x[] = {foo(), bar()};
  3911.   ///      if (true) {                          if (true) {
  3912.   ///        f( );                                f();
  3913.   ///      }                                    }
  3914.   ///    }                                    }
  3915.   /// \endcode
  3916.   /// \version 3.7
  3917.   bool SpaceInEmptyParentheses;
  3918.  
  3919.   /// The number of spaces before trailing line comments
  3920.   /// (``//`` - comments).
  3921.   ///
  3922.   /// This does not affect trailing block comments (``/*`` - comments) as
  3923.   /// those commonly have different usage patterns and a number of special
  3924.   /// cases.
  3925.   /// \code
  3926.   ///    SpacesBeforeTrailingComments: 3
  3927.   ///    void f() {
  3928.   ///      if (true) {   // foo1
  3929.   ///        f();        // bar
  3930.   ///      }             // foo
  3931.   ///    }
  3932.   /// \endcode
  3933.   /// \version 3.7
  3934.   unsigned SpacesBeforeTrailingComments;
  3935.  
  3936.   /// Styles for adding spacing after ``<`` and before ``>`
  3937.   ///  in template argument lists.
  3938.   enum SpacesInAnglesStyle : int8_t {
  3939.     /// Remove spaces after ``<`` and before ``>``.
  3940.     /// \code
  3941.     ///    static_cast<int>(arg);
  3942.     ///    std::function<void(int)> fct;
  3943.     /// \endcode
  3944.     SIAS_Never,
  3945.     /// Add spaces after ``<`` and before ``>``.
  3946.     /// \code
  3947.     ///    static_cast< int >(arg);
  3948.     ///    std::function< void(int) > fct;
  3949.     /// \endcode
  3950.     SIAS_Always,
  3951.     /// Keep a single space after ``<`` and before ``>`` if any spaces were
  3952.     /// present. Option ``Standard: Cpp03`` takes precedence.
  3953.     SIAS_Leave
  3954.   };
  3955.   /// The SpacesInAnglesStyle to use for template argument lists.
  3956.   /// \version 3.4
  3957.   SpacesInAnglesStyle SpacesInAngles;
  3958.  
  3959.   /// If ``true``, spaces will be inserted around if/for/switch/while
  3960.   /// conditions.
  3961.   /// \code
  3962.   ///    true:                                  false:
  3963.   ///    if ( a )  { ... }              vs.     if (a) { ... }
  3964.   ///    while ( i < 5 )  { ... }               while (i < 5) { ... }
  3965.   /// \endcode
  3966.   /// \version 10
  3967.   bool SpacesInConditionalStatement;
  3968.  
  3969.   /// If ``true``, spaces are inserted inside container literals (e.g.
  3970.   /// ObjC and Javascript array and dict literals).
  3971.   /// \code{.js}
  3972.   ///    true:                                  false:
  3973.   ///    var arr = [ 1, 2, 3 ];         vs.     var arr = [1, 2, 3];
  3974.   ///    f({a : 1, b : 2, c : 3});              f({a: 1, b: 2, c: 3});
  3975.   /// \endcode
  3976.   /// \version 3.7
  3977.   bool SpacesInContainerLiterals;
  3978.  
  3979.   /// If ``true``, spaces may be inserted into C style casts.
  3980.   /// \code
  3981.   ///    true:                                  false:
  3982.   ///    x = ( int32 )y                 vs.     x = (int32)y
  3983.   /// \endcode
  3984.   /// \version 3.7
  3985.   bool SpacesInCStyleCastParentheses;
  3986.  
  3987.   /// Control of spaces within a single line comment.
  3988.   struct SpacesInLineComment {
  3989.     /// The minimum number of spaces at the start of the comment.
  3990.     unsigned Minimum;
  3991.     /// The maximum number of spaces at the start of the comment.
  3992.     unsigned Maximum;
  3993.   };
  3994.  
  3995.   /// How many spaces are allowed at the start of a line comment. To disable the
  3996.   /// maximum set it to ``-1``, apart from that the maximum takes precedence
  3997.   /// over the minimum.
  3998.   /// \code
  3999.   ///   Minimum = 1
  4000.   ///   Maximum = -1
  4001.   ///   // One space is forced
  4002.   ///
  4003.   ///   //  but more spaces are possible
  4004.   ///
  4005.   ///   Minimum = 0
  4006.   ///   Maximum = 0
  4007.   ///   //Forces to start every comment directly after the slashes
  4008.   /// \endcode
  4009.   ///
  4010.   /// Note that in line comment sections the relative indent of the subsequent
  4011.   /// lines is kept, that means the following:
  4012.   /// \code
  4013.   ///   before:                                   after:
  4014.   ///   Minimum: 1
  4015.   ///   //if (b) {                                // if (b) {
  4016.   ///   //  return true;                          //   return true;
  4017.   ///   //}                                       // }
  4018.   ///
  4019.   ///   Maximum: 0
  4020.   ///   /// List:                                 ///List:
  4021.   ///   ///  - Foo                                /// - Foo
  4022.   ///   ///    - Bar                              ///   - Bar
  4023.   /// \endcode
  4024.   ///
  4025.   /// This option has only effect if ``ReflowComments`` is set to ``true``.
  4026.   /// \version 13
  4027.   SpacesInLineComment SpacesInLineCommentPrefix;
  4028.  
  4029.   /// If ``true``, spaces will be inserted after ``(`` and before ``)``.
  4030.   /// \code
  4031.   ///    true:                                  false:
  4032.   ///    t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
  4033.   /// \endcode
  4034.   /// \version 3.7
  4035.   bool SpacesInParentheses;
  4036.  
  4037.   /// If ``true``, spaces will be inserted after ``[`` and before ``]``.
  4038.   /// Lambdas without arguments or unspecified size array declarations will not
  4039.   /// be affected.
  4040.   /// \code
  4041.   ///    true:                                  false:
  4042.   ///    int a[ 5 ];                    vs.     int a[5];
  4043.   ///    std::unique_ptr<int[]> foo() {} // Won't be affected
  4044.   /// \endcode
  4045.   /// \version 3.7
  4046.   bool SpacesInSquareBrackets;
  4047.  
  4048.   /// Supported language standards for parsing and formatting C++ constructs.
  4049.   /// \code
  4050.   ///    Latest:                                vector<set<int>>
  4051.   ///    c++03                          vs.     vector<set<int> >
  4052.   /// \endcode
  4053.   ///
  4054.   /// The correct way to spell a specific language version is e.g. ``c++11``.
  4055.   /// The historical aliases ``Cpp03`` and ``Cpp11`` are deprecated.
  4056.   enum LanguageStandard : int8_t {
  4057.     /// Parse and format as C++03.
  4058.     /// ``Cpp03`` is a deprecated alias for ``c++03``
  4059.     LS_Cpp03, // c++03
  4060.     /// Parse and format as C++11.
  4061.     LS_Cpp11, // c++11
  4062.     /// Parse and format as C++14.
  4063.     LS_Cpp14, // c++14
  4064.     /// Parse and format as C++17.
  4065.     LS_Cpp17, // c++17
  4066.     /// Parse and format as C++20.
  4067.     LS_Cpp20, // c++20
  4068.     /// Parse and format using the latest supported language version.
  4069.     /// ``Cpp11`` is a deprecated alias for ``Latest``
  4070.     LS_Latest,
  4071.     /// Automatic detection based on the input.
  4072.     LS_Auto,
  4073.   };
  4074.  
  4075.   /// Parse and format C++ constructs compatible with this standard.
  4076.   /// \code
  4077.   ///    c++03:                                 latest:
  4078.   ///    vector<set<int> > x;           vs.     vector<set<int>> x;
  4079.   /// \endcode
  4080.   /// \version 3.7
  4081.   LanguageStandard Standard;
  4082.  
  4083.   /// Macros which are ignored in front of a statement, as if they were an
  4084.   /// attribute. So that they are not parsed as identifier, for example for Qts
  4085.   /// emit.
  4086.   /// \code
  4087.   ///   AlignConsecutiveDeclarations: true
  4088.   ///   StatementAttributeLikeMacros: []
  4089.   ///   unsigned char data = 'x';
  4090.   ///   emit          signal(data); // This is parsed as variable declaration.
  4091.   ///
  4092.   ///   AlignConsecutiveDeclarations: true
  4093.   ///   StatementAttributeLikeMacros: [emit]
  4094.   ///   unsigned char data = 'x';
  4095.   ///   emit signal(data); // Now it's fine again.
  4096.   /// \endcode
  4097.   /// \version 12
  4098.   std::vector<std::string> StatementAttributeLikeMacros;
  4099.  
  4100.   /// A vector of macros that should be interpreted as complete
  4101.   /// statements.
  4102.   ///
  4103.   /// Typical macros are expressions, and require a semi-colon to be
  4104.   /// added; sometimes this is not the case, and this allows to make
  4105.   /// clang-format aware of such cases.
  4106.   ///
  4107.   /// For example: Q_UNUSED
  4108.   /// \version 8
  4109.   std::vector<std::string> StatementMacros;
  4110.  
  4111.   /// The number of columns used for tab stops.
  4112.   /// \version 3.7
  4113.   unsigned TabWidth;
  4114.  
  4115.   /// \brief A vector of macros that should be interpreted as type declarations
  4116.   /// instead of as function calls.
  4117.   ///
  4118.   /// These are expected to be macros of the form:
  4119.   /// \code
  4120.   ///   STACK_OF(...)
  4121.   /// \endcode
  4122.   ///
  4123.   /// In the .clang-format configuration file, this can be configured like:
  4124.   /// \code{.yaml}
  4125.   ///   TypenameMacros: ['STACK_OF', 'LIST']
  4126.   /// \endcode
  4127.   ///
  4128.   /// For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
  4129.   /// \version 9
  4130.   std::vector<std::string> TypenameMacros;
  4131.  
  4132.   /// This option is **deprecated**. See ``LF`` and ``CRLF`` of ``LineEnding``.
  4133.   /// \version 10
  4134.   // bool UseCRLF;
  4135.  
  4136.   /// Different ways to use tab in formatting.
  4137.   enum UseTabStyle : int8_t {
  4138.     /// Never use tab.
  4139.     UT_Never,
  4140.     /// Use tabs only for indentation.
  4141.     UT_ForIndentation,
  4142.     /// Fill all leading whitespace with tabs, and use spaces for alignment that
  4143.     /// appears within a line (e.g. consecutive assignments and declarations).
  4144.     UT_ForContinuationAndIndentation,
  4145.     /// Use tabs for line continuation and indentation, and spaces for
  4146.     /// alignment.
  4147.     UT_AlignWithSpaces,
  4148.     /// Use tabs whenever we need to fill whitespace that spans at least from
  4149.     /// one tab stop to the next one.
  4150.     UT_Always
  4151.   };
  4152.  
  4153.   /// The way to use tab characters in the resulting file.
  4154.   /// \version 3.7
  4155.   UseTabStyle UseTab;
  4156.  
  4157.   /// A vector of macros which are whitespace-sensitive and should not
  4158.   /// be touched.
  4159.   ///
  4160.   /// These are expected to be macros of the form:
  4161.   /// \code
  4162.   ///   STRINGIZE(...)
  4163.   /// \endcode
  4164.   ///
  4165.   /// In the .clang-format configuration file, this can be configured like:
  4166.   /// \code{.yaml}
  4167.   ///   WhitespaceSensitiveMacros: ['STRINGIZE', 'PP_STRINGIZE']
  4168.   /// \endcode
  4169.   ///
  4170.   /// For example: BOOST_PP_STRINGIZE
  4171.   /// \version 11
  4172.   std::vector<std::string> WhitespaceSensitiveMacros;
  4173.  
  4174.   bool operator==(const FormatStyle &R) const {
  4175.     return AccessModifierOffset == R.AccessModifierOffset &&
  4176.            AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
  4177.            AlignArrayOfStructures == R.AlignArrayOfStructures &&
  4178.            AlignConsecutiveAssignments == R.AlignConsecutiveAssignments &&
  4179.            AlignConsecutiveBitFields == R.AlignConsecutiveBitFields &&
  4180.            AlignConsecutiveDeclarations == R.AlignConsecutiveDeclarations &&
  4181.            AlignConsecutiveMacros == R.AlignConsecutiveMacros &&
  4182.            AlignEscapedNewlines == R.AlignEscapedNewlines &&
  4183.            AlignOperands == R.AlignOperands &&
  4184.            AlignTrailingComments == R.AlignTrailingComments &&
  4185.            AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
  4186.            AllowAllParametersOfDeclarationOnNextLine ==
  4187.                R.AllowAllParametersOfDeclarationOnNextLine &&
  4188.            AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
  4189.            AllowShortCaseLabelsOnASingleLine ==
  4190.                R.AllowShortCaseLabelsOnASingleLine &&
  4191.            AllowShortEnumsOnASingleLine == R.AllowShortEnumsOnASingleLine &&
  4192.            AllowShortFunctionsOnASingleLine ==
  4193.                R.AllowShortFunctionsOnASingleLine &&
  4194.            AllowShortIfStatementsOnASingleLine ==
  4195.                R.AllowShortIfStatementsOnASingleLine &&
  4196.            AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
  4197.            AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
  4198.            AlwaysBreakAfterReturnType == R.AlwaysBreakAfterReturnType &&
  4199.            AlwaysBreakBeforeMultilineStrings ==
  4200.                R.AlwaysBreakBeforeMultilineStrings &&
  4201.            AlwaysBreakTemplateDeclarations ==
  4202.                R.AlwaysBreakTemplateDeclarations &&
  4203.            AttributeMacros == R.AttributeMacros &&
  4204.            BinPackArguments == R.BinPackArguments &&
  4205.            BinPackParameters == R.BinPackParameters &&
  4206.            BitFieldColonSpacing == R.BitFieldColonSpacing &&
  4207.            BreakAfterAttributes == R.BreakAfterAttributes &&
  4208.            BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
  4209.            BreakArrays == R.BreakArrays &&
  4210.            BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
  4211.            BreakBeforeBraces == R.BreakBeforeBraces &&
  4212.            BreakBeforeConceptDeclarations == R.BreakBeforeConceptDeclarations &&
  4213.            BreakBeforeInlineASMColon == R.BreakBeforeInlineASMColon &&
  4214.            BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
  4215.            BreakConstructorInitializers == R.BreakConstructorInitializers &&
  4216.            BreakInheritanceList == R.BreakInheritanceList &&
  4217.            BreakStringLiterals == R.BreakStringLiterals &&
  4218.            ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
  4219.            CompactNamespaces == R.CompactNamespaces &&
  4220.            ConstructorInitializerIndentWidth ==
  4221.                R.ConstructorInitializerIndentWidth &&
  4222.            ContinuationIndentWidth == R.ContinuationIndentWidth &&
  4223.            Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
  4224.            DerivePointerAlignment == R.DerivePointerAlignment &&
  4225.            DisableFormat == R.DisableFormat &&
  4226.            EmptyLineAfterAccessModifier == R.EmptyLineAfterAccessModifier &&
  4227.            EmptyLineBeforeAccessModifier == R.EmptyLineBeforeAccessModifier &&
  4228.            ExperimentalAutoDetectBinPacking ==
  4229.                R.ExperimentalAutoDetectBinPacking &&
  4230.            FixNamespaceComments == R.FixNamespaceComments &&
  4231.            ForEachMacros == R.ForEachMacros &&
  4232.            IncludeStyle.IncludeBlocks == R.IncludeStyle.IncludeBlocks &&
  4233.            IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
  4234.            IncludeStyle.IncludeIsMainRegex ==
  4235.                R.IncludeStyle.IncludeIsMainRegex &&
  4236.            IncludeStyle.IncludeIsMainSourceRegex ==
  4237.                R.IncludeStyle.IncludeIsMainSourceRegex &&
  4238.            IndentAccessModifiers == R.IndentAccessModifiers &&
  4239.            IndentCaseBlocks == R.IndentCaseBlocks &&
  4240.            IndentCaseLabels == R.IndentCaseLabels &&
  4241.            IndentExternBlock == R.IndentExternBlock &&
  4242.            IndentGotoLabels == R.IndentGotoLabels &&
  4243.            IndentPPDirectives == R.IndentPPDirectives &&
  4244.            IndentRequiresClause == R.IndentRequiresClause &&
  4245.            IndentWidth == R.IndentWidth &&
  4246.            IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
  4247.            InsertBraces == R.InsertBraces &&
  4248.            InsertNewlineAtEOF == R.InsertNewlineAtEOF &&
  4249.            IntegerLiteralSeparator == R.IntegerLiteralSeparator &&
  4250.            JavaImportGroups == R.JavaImportGroups &&
  4251.            JavaScriptQuotes == R.JavaScriptQuotes &&
  4252.            JavaScriptWrapImports == R.JavaScriptWrapImports &&
  4253.            KeepEmptyLinesAtTheStartOfBlocks ==
  4254.                R.KeepEmptyLinesAtTheStartOfBlocks &&
  4255.            Language == R.Language &&
  4256.            LambdaBodyIndentation == R.LambdaBodyIndentation &&
  4257.            LineEnding == R.LineEnding && MacroBlockBegin == R.MacroBlockBegin &&
  4258.            MacroBlockEnd == R.MacroBlockEnd &&
  4259.            MaxEmptyLinesToKeep == R.MaxEmptyLinesToKeep &&
  4260.            NamespaceIndentation == R.NamespaceIndentation &&
  4261.            NamespaceMacros == R.NamespaceMacros &&
  4262.            ObjCBinPackProtocolList == R.ObjCBinPackProtocolList &&
  4263.            ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
  4264.            ObjCBreakBeforeNestedBlockParam ==
  4265.                R.ObjCBreakBeforeNestedBlockParam &&
  4266.            ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
  4267.            ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
  4268.            PackConstructorInitializers == R.PackConstructorInitializers &&
  4269.            PenaltyBreakAssignment == R.PenaltyBreakAssignment &&
  4270.            PenaltyBreakBeforeFirstCallParameter ==
  4271.                R.PenaltyBreakBeforeFirstCallParameter &&
  4272.            PenaltyBreakComment == R.PenaltyBreakComment &&
  4273.            PenaltyBreakFirstLessLess == R.PenaltyBreakFirstLessLess &&
  4274.            PenaltyBreakOpenParenthesis == R.PenaltyBreakOpenParenthesis &&
  4275.            PenaltyBreakString == R.PenaltyBreakString &&
  4276.            PenaltyBreakTemplateDeclaration ==
  4277.                R.PenaltyBreakTemplateDeclaration &&
  4278.            PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
  4279.            PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
  4280.            PointerAlignment == R.PointerAlignment &&
  4281.            QualifierAlignment == R.QualifierAlignment &&
  4282.            QualifierOrder == R.QualifierOrder &&
  4283.            RawStringFormats == R.RawStringFormats &&
  4284.            ReferenceAlignment == R.ReferenceAlignment &&
  4285.            RemoveBracesLLVM == R.RemoveBracesLLVM &&
  4286.            RemoveSemicolon == R.RemoveSemicolon &&
  4287.            RequiresClausePosition == R.RequiresClausePosition &&
  4288.            RequiresExpressionIndentation == R.RequiresExpressionIndentation &&
  4289.            SeparateDefinitionBlocks == R.SeparateDefinitionBlocks &&
  4290.            ShortNamespaceLines == R.ShortNamespaceLines &&
  4291.            SortIncludes == R.SortIncludes &&
  4292.            SortJavaStaticImport == R.SortJavaStaticImport &&
  4293.            SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
  4294.            SpaceAfterLogicalNot == R.SpaceAfterLogicalNot &&
  4295.            SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword &&
  4296.            SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
  4297.            SpaceBeforeCaseColon == R.SpaceBeforeCaseColon &&
  4298.            SpaceBeforeCpp11BracedList == R.SpaceBeforeCpp11BracedList &&
  4299.            SpaceBeforeCtorInitializerColon ==
  4300.                R.SpaceBeforeCtorInitializerColon &&
  4301.            SpaceBeforeInheritanceColon == R.SpaceBeforeInheritanceColon &&
  4302.            SpaceBeforeParens == R.SpaceBeforeParens &&
  4303.            SpaceBeforeParensOptions == R.SpaceBeforeParensOptions &&
  4304.            SpaceAroundPointerQualifiers == R.SpaceAroundPointerQualifiers &&
  4305.            SpaceBeforeRangeBasedForLoopColon ==
  4306.                R.SpaceBeforeRangeBasedForLoopColon &&
  4307.            SpaceBeforeSquareBrackets == R.SpaceBeforeSquareBrackets &&
  4308.            SpaceInEmptyBlock == R.SpaceInEmptyBlock &&
  4309.            SpaceInEmptyParentheses == R.SpaceInEmptyParentheses &&
  4310.            SpacesBeforeTrailingComments == R.SpacesBeforeTrailingComments &&
  4311.            SpacesInAngles == R.SpacesInAngles &&
  4312.            SpacesInConditionalStatement == R.SpacesInConditionalStatement &&
  4313.            SpacesInContainerLiterals == R.SpacesInContainerLiterals &&
  4314.            SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses &&
  4315.            SpacesInLineCommentPrefix.Minimum ==
  4316.                R.SpacesInLineCommentPrefix.Minimum &&
  4317.            SpacesInLineCommentPrefix.Maximum ==
  4318.                R.SpacesInLineCommentPrefix.Maximum &&
  4319.            SpacesInParentheses == R.SpacesInParentheses &&
  4320.            SpacesInSquareBrackets == R.SpacesInSquareBrackets &&
  4321.            Standard == R.Standard &&
  4322.            StatementAttributeLikeMacros == R.StatementAttributeLikeMacros &&
  4323.            StatementMacros == R.StatementMacros && TabWidth == R.TabWidth &&
  4324.            TypenameMacros == R.TypenameMacros && UseTab == R.UseTab &&
  4325.            WhitespaceSensitiveMacros == R.WhitespaceSensitiveMacros;
  4326.   }
  4327.  
  4328.   std::optional<FormatStyle> GetLanguageStyle(LanguageKind Language) const;
  4329.  
  4330.   // Stores per-language styles. A FormatStyle instance inside has an empty
  4331.   // StyleSet. A FormatStyle instance returned by the Get method has its
  4332.   // StyleSet set to a copy of the originating StyleSet, effectively keeping the
  4333.   // internal representation of that StyleSet alive.
  4334.   //
  4335.   // The memory management and ownership reminds of a birds nest: chicks
  4336.   // leaving the nest take photos of the nest with them.
  4337.   struct FormatStyleSet {
  4338.     typedef std::map<FormatStyle::LanguageKind, FormatStyle> MapType;
  4339.  
  4340.     std::optional<FormatStyle> Get(FormatStyle::LanguageKind Language) const;
  4341.  
  4342.     // Adds \p Style to this FormatStyleSet. Style must not have an associated
  4343.     // FormatStyleSet.
  4344.     // Style.Language should be different than LK_None. If this FormatStyleSet
  4345.     // already contains an entry for Style.Language, that gets replaced with the
  4346.     // passed Style.
  4347.     void Add(FormatStyle Style);
  4348.  
  4349.     // Clears this FormatStyleSet.
  4350.     void Clear();
  4351.  
  4352.   private:
  4353.     std::shared_ptr<MapType> Styles;
  4354.   };
  4355.  
  4356.   static FormatStyleSet BuildStyleSetFromConfiguration(
  4357.       const FormatStyle &MainStyle,
  4358.       const std::vector<FormatStyle> &ConfigurationStyles);
  4359.  
  4360. private:
  4361.   FormatStyleSet StyleSet;
  4362.  
  4363.   friend std::error_code
  4364.   parseConfiguration(llvm::MemoryBufferRef Config, FormatStyle *Style,
  4365.                      bool AllowUnknownOptions,
  4366.                      llvm::SourceMgr::DiagHandlerTy DiagHandler,
  4367.                      void *DiagHandlerCtxt);
  4368. };
  4369.  
  4370. /// Returns a format style complying with the LLVM coding standards:
  4371. /// http://llvm.org/docs/CodingStandards.html.
  4372. FormatStyle getLLVMStyle(
  4373.     FormatStyle::LanguageKind Language = FormatStyle::LanguageKind::LK_Cpp);
  4374.  
  4375. /// Returns a format style complying with one of Google's style guides:
  4376. /// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
  4377. /// http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml.
  4378. /// https://developers.google.com/protocol-buffers/docs/style.
  4379. FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language);
  4380.  
  4381. /// Returns a format style complying with Chromium's style guide:
  4382. /// http://www.chromium.org/developers/coding-style.
  4383. FormatStyle getChromiumStyle(FormatStyle::LanguageKind Language);
  4384.  
  4385. /// Returns a format style complying with Mozilla's style guide:
  4386. /// https://firefox-source-docs.mozilla.org/code-quality/coding-style/index.html.
  4387. FormatStyle getMozillaStyle();
  4388.  
  4389. /// Returns a format style complying with Webkit's style guide:
  4390. /// http://www.webkit.org/coding/coding-style.html
  4391. FormatStyle getWebKitStyle();
  4392.  
  4393. /// Returns a format style complying with GNU Coding Standards:
  4394. /// http://www.gnu.org/prep/standards/standards.html
  4395. FormatStyle getGNUStyle();
  4396.  
  4397. /// Returns a format style complying with Microsoft style guide:
  4398. /// https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017
  4399. FormatStyle getMicrosoftStyle(FormatStyle::LanguageKind Language);
  4400.  
  4401. /// Returns style indicating formatting should be not applied at all.
  4402. FormatStyle getNoStyle();
  4403.  
  4404. /// Gets a predefined style for the specified language by name.
  4405. ///
  4406. /// Currently supported names: LLVM, Google, Chromium, Mozilla. Names are
  4407. /// compared case-insensitively.
  4408. ///
  4409. /// Returns ``true`` if the Style has been set.
  4410. bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language,
  4411.                         FormatStyle *Style);
  4412.  
  4413. /// Parse configuration from YAML-formatted text.
  4414. ///
  4415. /// Style->Language is used to get the base style, if the ``BasedOnStyle``
  4416. /// option is present.
  4417. ///
  4418. /// The FormatStyleSet of Style is reset.
  4419. ///
  4420. /// When ``BasedOnStyle`` is not present, options not present in the YAML
  4421. /// document, are retained in \p Style.
  4422. ///
  4423. /// If AllowUnknownOptions is true, no errors are emitted if unknown
  4424. /// format options are occurred.
  4425. ///
  4426. /// If set all diagnostics are emitted through the DiagHandler.
  4427. std::error_code
  4428. parseConfiguration(llvm::MemoryBufferRef Config, FormatStyle *Style,
  4429.                    bool AllowUnknownOptions = false,
  4430.                    llvm::SourceMgr::DiagHandlerTy DiagHandler = nullptr,
  4431.                    void *DiagHandlerCtx = nullptr);
  4432.  
  4433. /// Like above but accepts an unnamed buffer.
  4434. inline std::error_code parseConfiguration(StringRef Config, FormatStyle *Style,
  4435.                                           bool AllowUnknownOptions = false) {
  4436.   return parseConfiguration(llvm::MemoryBufferRef(Config, "YAML"), Style,
  4437.                             AllowUnknownOptions);
  4438. }
  4439.  
  4440. /// Gets configuration in a YAML string.
  4441. std::string configurationAsText(const FormatStyle &Style);
  4442.  
  4443. /// Returns the replacements necessary to sort all ``#include`` blocks
  4444. /// that are affected by ``Ranges``.
  4445. tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code,
  4446.                                    ArrayRef<tooling::Range> Ranges,
  4447.                                    StringRef FileName,
  4448.                                    unsigned *Cursor = nullptr);
  4449.  
  4450. /// Returns the replacements corresponding to applying and formatting
  4451. /// \p Replaces on success; otheriwse, return an llvm::Error carrying
  4452. /// llvm::StringError.
  4453. llvm::Expected<tooling::Replacements>
  4454. formatReplacements(StringRef Code, const tooling::Replacements &Replaces,
  4455.                    const FormatStyle &Style);
  4456.  
  4457. /// Returns the replacements corresponding to applying \p Replaces and
  4458. /// cleaning up the code after that on success; otherwise, return an llvm::Error
  4459. /// carrying llvm::StringError.
  4460. /// This also supports inserting/deleting C++ #include directives:
  4461. /// - If a replacement has offset UINT_MAX, length 0, and a replacement text
  4462. ///   that is an #include directive, this will insert the #include into the
  4463. ///   correct block in the \p Code.
  4464. /// - If a replacement has offset UINT_MAX, length 1, and a replacement text
  4465. ///   that is the name of the header to be removed, the header will be removed
  4466. ///   from \p Code if it exists.
  4467. /// The include manipulation is done via `tooling::HeaderInclude`, see its
  4468. /// documentation for more details on how include insertion points are found and
  4469. /// what edits are produced.
  4470. llvm::Expected<tooling::Replacements>
  4471. cleanupAroundReplacements(StringRef Code, const tooling::Replacements &Replaces,
  4472.                           const FormatStyle &Style);
  4473.  
  4474. /// Represents the status of a formatting attempt.
  4475. struct FormattingAttemptStatus {
  4476.   /// A value of ``false`` means that any of the affected ranges were not
  4477.   /// formatted due to a non-recoverable syntax error.
  4478.   bool FormatComplete = true;
  4479.  
  4480.   /// If ``FormatComplete`` is false, ``Line`` records a one-based
  4481.   /// original line number at which a syntax error might have occurred. This is
  4482.   /// based on a best-effort analysis and could be imprecise.
  4483.   unsigned Line = 0;
  4484. };
  4485.  
  4486. /// Reformats the given \p Ranges in \p Code.
  4487. ///
  4488. /// Each range is extended on either end to its next bigger logic unit, i.e.
  4489. /// everything that might influence its formatting or might be influenced by its
  4490. /// formatting.
  4491. ///
  4492. /// Returns the ``Replacements`` necessary to make all \p Ranges comply with
  4493. /// \p Style.
  4494. ///
  4495. /// If ``Status`` is non-null, its value will be populated with the status of
  4496. /// this formatting attempt. See \c FormattingAttemptStatus.
  4497. tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
  4498.                                ArrayRef<tooling::Range> Ranges,
  4499.                                StringRef FileName = "<stdin>",
  4500.                                FormattingAttemptStatus *Status = nullptr);
  4501.  
  4502. /// Same as above, except if ``IncompleteFormat`` is non-null, its value
  4503. /// will be set to true if any of the affected ranges were not formatted due to
  4504. /// a non-recoverable syntax error.
  4505. tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
  4506.                                ArrayRef<tooling::Range> Ranges,
  4507.                                StringRef FileName, bool *IncompleteFormat);
  4508.  
  4509. /// Clean up any erroneous/redundant code in the given \p Ranges in \p
  4510. /// Code.
  4511. ///
  4512. /// Returns the ``Replacements`` that clean up all \p Ranges in \p Code.
  4513. tooling::Replacements cleanup(const FormatStyle &Style, StringRef Code,
  4514.                               ArrayRef<tooling::Range> Ranges,
  4515.                               StringRef FileName = "<stdin>");
  4516.  
  4517. /// Fix namespace end comments in the given \p Ranges in \p Code.
  4518. ///
  4519. /// Returns the ``Replacements`` that fix the namespace comments in all
  4520. /// \p Ranges in \p Code.
  4521. tooling::Replacements fixNamespaceEndComments(const FormatStyle &Style,
  4522.                                               StringRef Code,
  4523.                                               ArrayRef<tooling::Range> Ranges,
  4524.                                               StringRef FileName = "<stdin>");
  4525.  
  4526. /// Inserts or removes empty lines separating definition blocks including
  4527. /// classes, structs, functions, namespaces, and enums in the given \p Ranges in
  4528. /// \p Code.
  4529. ///
  4530. /// Returns the ``Replacements`` that inserts or removes empty lines separating
  4531. /// definition blocks in all \p Ranges in \p Code.
  4532. tooling::Replacements separateDefinitionBlocks(const FormatStyle &Style,
  4533.                                                StringRef Code,
  4534.                                                ArrayRef<tooling::Range> Ranges,
  4535.                                                StringRef FileName = "<stdin>");
  4536.  
  4537. /// Sort consecutive using declarations in the given \p Ranges in
  4538. /// \p Code.
  4539. ///
  4540. /// Returns the ``Replacements`` that sort the using declarations in all
  4541. /// \p Ranges in \p Code.
  4542. tooling::Replacements sortUsingDeclarations(const FormatStyle &Style,
  4543.                                             StringRef Code,
  4544.                                             ArrayRef<tooling::Range> Ranges,
  4545.                                             StringRef FileName = "<stdin>");
  4546.  
  4547. /// Returns the ``LangOpts`` that the formatter expects you to set.
  4548. ///
  4549. /// \param Style determines specific settings for lexing mode.
  4550. LangOptions getFormattingLangOpts(const FormatStyle &Style = getLLVMStyle());
  4551.  
  4552. /// Description to be used for help text for a ``llvm::cl`` option for
  4553. /// specifying format style. The description is closely related to the operation
  4554. /// of ``getStyle()``.
  4555. extern const char *StyleOptionHelpDescription;
  4556.  
  4557. /// The suggested format style to use by default. This allows tools using
  4558. /// `getStyle` to have a consistent default style.
  4559. /// Different builds can modify the value to the preferred styles.
  4560. extern const char *DefaultFormatStyle;
  4561.  
  4562. /// The suggested predefined style to use as the fallback style in `getStyle`.
  4563. /// Different builds can modify the value to the preferred styles.
  4564. extern const char *DefaultFallbackStyle;
  4565.  
  4566. /// Construct a FormatStyle based on ``StyleName``.
  4567. ///
  4568. /// ``StyleName`` can take several forms:
  4569. /// * "{<key>: <value>, ...}" - Set specic style parameters.
  4570. /// * "<style name>" - One of the style names supported by
  4571. /// getPredefinedStyle().
  4572. /// * "file" - Load style configuration from a file called ``.clang-format``
  4573. /// located in one of the parent directories of ``FileName`` or the current
  4574. /// directory if ``FileName`` is empty.
  4575. /// * "file:<format_file_path>" to explicitly specify the configuration file to
  4576. /// use.
  4577. ///
  4578. /// \param[in] StyleName Style name to interpret according to the description
  4579. /// above.
  4580. /// \param[in] FileName Path to start search for .clang-format if ``StyleName``
  4581. /// == "file".
  4582. /// \param[in] FallbackStyle The name of a predefined style used to fallback to
  4583. /// in case \p StyleName is "file" and no file can be found.
  4584. /// \param[in] Code The actual code to be formatted. Used to determine the
  4585. /// language if the filename isn't sufficient.
  4586. /// \param[in] FS The underlying file system, in which the file resides. By
  4587. /// default, the file system is the real file system.
  4588. /// \param[in] AllowUnknownOptions If true, unknown format options only
  4589. ///             emit a warning. If false, errors are emitted on unknown format
  4590. ///             options.
  4591. ///
  4592. /// \returns FormatStyle as specified by ``StyleName``. If ``StyleName`` is
  4593. /// "file" and no file is found, returns ``FallbackStyle``. If no style could be
  4594. /// determined, returns an Error.
  4595. llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
  4596.                                      StringRef FallbackStyle,
  4597.                                      StringRef Code = "",
  4598.                                      llvm::vfs::FileSystem *FS = nullptr,
  4599.                                      bool AllowUnknownOptions = false);
  4600.  
  4601. // Guesses the language from the ``FileName`` and ``Code`` to be formatted.
  4602. // Defaults to FormatStyle::LK_Cpp.
  4603. FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code);
  4604.  
  4605. // Returns a string representation of ``Language``.
  4606. inline StringRef getLanguageName(FormatStyle::LanguageKind Language) {
  4607.   switch (Language) {
  4608.   case FormatStyle::LK_Cpp:
  4609.     return "C++";
  4610.   case FormatStyle::LK_CSharp:
  4611.     return "CSharp";
  4612.   case FormatStyle::LK_ObjC:
  4613.     return "Objective-C";
  4614.   case FormatStyle::LK_Java:
  4615.     return "Java";
  4616.   case FormatStyle::LK_JavaScript:
  4617.     return "JavaScript";
  4618.   case FormatStyle::LK_Json:
  4619.     return "Json";
  4620.   case FormatStyle::LK_Proto:
  4621.     return "Proto";
  4622.   case FormatStyle::LK_TableGen:
  4623.     return "TableGen";
  4624.   case FormatStyle::LK_TextProto:
  4625.     return "TextProto";
  4626.   case FormatStyle::LK_Verilog:
  4627.     return "Verilog";
  4628.   default:
  4629.     return "Unknown";
  4630.   }
  4631. }
  4632.  
  4633. } // end namespace format
  4634. } // end namespace clang
  4635.  
  4636. namespace std {
  4637. template <>
  4638. struct is_error_code_enum<clang::format::ParseError> : std::true_type {};
  4639. } // namespace std
  4640.  
  4641. #endif // LLVM_CLANG_FORMAT_FORMAT_H
  4642.