Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / docs / ClangFormatStyleOptions.rst
blob21342e1b89ea866a0e951bde5b9f3e02973626cb
1 ..
2   !!!!NOTE!!!!
3   This file is automatically generated, in part. Do not edit the style options
4   in this file directly. Instead, modify them in include/clang/Format/Format.h
5   and run the docs/tools/dump_format_style.py script to update this file.
7 .. raw:: html
9       <style type="text/css">
10         .versionbadge { background-color: #1c913d; height: 20px; display: inline-block; min-width: 120px; text-align: center; border-radius: 5px; color: #FFFFFF; font-family: "Verdana,Geneva,DejaVu Sans,sans-serif"; }
11       </style>
13 .. role:: versionbadge
15 ==========================
16 Clang-Format Style Options
17 ==========================
19 :doc:`ClangFormatStyleOptions` describes configurable formatting style options
20 supported by :doc:`LibFormat` and :doc:`ClangFormat`.
22 When using :program:`clang-format` command line utility or
23 ``clang::format::reformat(...)`` functions from code, one can either use one of
24 the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit, Microsoft) or
25 create a custom style by configuring specific style options.
28 Configuring Style with clang-format
29 ===================================
31 :program:`clang-format` supports two ways to provide custom style options:
32 directly specify style configuration in the ``-style=`` command line option or
33 use ``-style=file`` and put style configuration in the ``.clang-format`` or
34 ``_clang-format`` file in the project directory.
36 When using ``-style=file``, :program:`clang-format` for each input file will
37 try to find the ``.clang-format`` file located in the closest parent directory
38 of the input file. When the standard input is used, the search is started from
39 the current directory.
41 When using ``-style=file:<format_file_path>``, :program:`clang-format` for
42 each input file will use the format file located at `<format_file_path>`.
43 The path may be absolute or relative to the working directory.
45 The ``.clang-format`` file uses YAML format:
47 .. code-block:: yaml
49   key1: value1
50   key2: value2
51   # A comment.
52   ...
54 The configuration file can consist of several sections each having different
55 ``Language:`` parameter denoting the programming language this section of the
56 configuration is targeted at. See the description of the **Language** option
57 below for the list of supported languages. The first section may have no
58 language set, it will set the default style options for all languages.
59 Configuration sections for specific language will override options set in the
60 default section.
62 When :program:`clang-format` formats a file, it auto-detects the language using
63 the file name. When formatting standard input or a file that doesn't have the
64 extension corresponding to its language, ``-assume-filename=`` option can be
65 used to override the file name :program:`clang-format` uses to detect the
66 language.
68 An example of a configuration file for multiple languages:
70 .. code-block:: yaml
72   ---
73   # We'll use defaults from the LLVM style, but with 4 columns indentation.
74   BasedOnStyle: LLVM
75   IndentWidth: 4
76   ---
77   Language: Cpp
78   # Force pointers to the type for C++.
79   DerivePointerAlignment: false
80   PointerAlignment: Left
81   ---
82   Language: JavaScript
83   # Use 100 columns for JS.
84   ColumnLimit: 100
85   ---
86   Language: Proto
87   # Don't format .proto files.
88   DisableFormat: true
89   ---
90   Language: CSharp
91   # Use 100 columns for C#.
92   ColumnLimit: 100
93   ...
95 An easy way to get a valid ``.clang-format`` file containing all configuration
96 options of a certain predefined style is:
98 .. code-block:: console
100   clang-format -style=llvm -dump-config > .clang-format
102 When specifying configuration in the ``-style=`` option, the same configuration
103 is applied for all input files. The format of the configuration is:
105 .. code-block:: console
107   -style='{key1: value1, key2: value2, ...}'
110 Disabling Formatting on a Piece of Code
111 =======================================
113 Clang-format understands also special comments that switch formatting in a
114 delimited range. The code between a comment ``// clang-format off`` or
115 ``/* clang-format off */`` up to a comment ``// clang-format on`` or
116 ``/* clang-format on */`` will not be formatted. The comments themselves will be
117 formatted (aligned) normally. Also, a colon (``:``) and additional text may
118 follow ``// clang-format off`` or ``// clang-format on`` to explain why
119 clang-format is turned off or back on.
121 .. code-block:: c++
123   int formatted_code;
124   // clang-format off
125       void    unformatted_code  ;
126   // clang-format on
127   void formatted_code_again;
130 Configuring Style in Code
131 =========================
133 When using ``clang::format::reformat(...)`` functions, the format is specified
134 by supplying the `clang::format::FormatStyle
135 <https://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_
136 structure.
139 Configurable Format Style Options
140 =================================
142 This section lists the supported style options. Value type is specified for
143 each option. For enumeration types possible values are specified both as a C++
144 enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in
145 the configuration (without a prefix: ``Auto``).
147 .. _BasedOnStyle:
149 **BasedOnStyle** (``String``) :ref:`¶ <BasedOnStyle>`
150   The style used for all options not specifically set in the configuration.
152   This option is supported only in the :program:`clang-format` configuration
153   (both within ``-style='{...}'`` and the ``.clang-format`` file).
155   Possible values:
157   * ``LLVM``
158     A style complying with the `LLVM coding standards
159     <https://llvm.org/docs/CodingStandards.html>`_
160   * ``Google``
161     A style complying with `Google's C++ style guide
162     <https://google.github.io/styleguide/cppguide.html>`_
163   * ``Chromium``
164     A style complying with `Chromium's style guide
165     <https://chromium.googlesource.com/chromium/src/+/refs/heads/main/styleguide/styleguide.md>`_
166   * ``Mozilla``
167     A style complying with `Mozilla's style guide
168     <https://firefox-source-docs.mozilla.org/code-quality/coding-style/index.html>`_
169   * ``WebKit``
170     A style complying with `WebKit's style guide
171     <https://www.webkit.org/coding/coding-style.html>`_
172   * ``Microsoft``
173     A style complying with `Microsoft's style guide
174     <https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference>`_
175   * ``GNU``
176     A style complying with the `GNU coding standards
177     <https://www.gnu.org/prep/standards/standards.html>`_
178   * ``InheritParentConfig``
179     Not a real style, but allows to use the ``.clang-format`` file from the
180     parent directory (or its parent if there is none). If there is no parent
181     file found it falls back to the ``fallback`` style, and applies the changes
182     to that.
184     With this option you can overwrite some parts of your main style for your
185     subdirectories. This is also possible through the command line, e.g.:
186     ``--style={BasedOnStyle: InheritParentConfig, ColumnLimit: 20}``
188 .. START_FORMAT_STYLE_OPTIONS
190 .. _AccessModifierOffset:
192 **AccessModifierOffset** (``Integer``) :versionbadge:`clang-format 3.3` :ref:`¶ <AccessModifierOffset>`
193   The extra indent or outdent of access modifiers, e.g. ``public:``.
195 .. _AlignAfterOpenBracket:
197 **AlignAfterOpenBracket** (``BracketAlignmentStyle``) :versionbadge:`clang-format 3.8` :ref:`¶ <AlignAfterOpenBracket>`
198   If ``true``, horizontally aligns arguments after an open bracket.
200   This applies to round brackets (parentheses), angle brackets and square
201   brackets.
203   Possible values:
205   * ``BAS_Align`` (in configuration: ``Align``)
206     Align parameters on the open bracket, e.g.:
208     .. code-block:: c++
210       someLongFunction(argument1,
211                        argument2);
213   * ``BAS_DontAlign`` (in configuration: ``DontAlign``)
214     Don't align, instead use ``ContinuationIndentWidth``, e.g.:
216     .. code-block:: c++
218       someLongFunction(argument1,
219           argument2);
221   * ``BAS_AlwaysBreak`` (in configuration: ``AlwaysBreak``)
222     Always break after an open bracket, if the parameters don't fit
223     on a single line, e.g.:
225     .. code-block:: c++
227       someLongFunction(
228           argument1, argument2);
230   * ``BAS_BlockIndent`` (in configuration: ``BlockIndent``)
231     Always break after an open bracket, if the parameters don't fit
232     on a single line. Closing brackets will be placed on a new line.
233     E.g.:
235     .. code-block:: c++
237       someLongFunction(
238           argument1, argument2
239       )
242     .. note::
244      This currently only applies to braced initializer lists (when
245      ``Cpp11BracedListStyle`` is ``true``) and parentheses.
249 .. _AlignArrayOfStructures:
251 **AlignArrayOfStructures** (``ArrayInitializerAlignmentStyle``) :versionbadge:`clang-format 13` :ref:`¶ <AlignArrayOfStructures>`
252   if not ``None``, when using initialization for an array of structs
253   aligns the fields into columns.
256   .. note::
258    As of clang-format 15 this option only applied to arrays with equal
259    number of columns per row.
261   Possible values:
263   * ``AIAS_Left`` (in configuration: ``Left``)
264     Align array column and left justify the columns e.g.:
266     .. code-block:: c++
268       struct test demo[] =
269       {
270           {56, 23,    "hello"},
271           {-1, 93463, "world"},
272           {7,  5,     "!!"   }
273       };
275   * ``AIAS_Right`` (in configuration: ``Right``)
276     Align array column and right justify the columns e.g.:
278     .. code-block:: c++
280       struct test demo[] =
281       {
282           {56,    23, "hello"},
283           {-1, 93463, "world"},
284           { 7,     5,    "!!"}
285       };
287   * ``AIAS_None`` (in configuration: ``None``)
288     Don't align array initializer columns.
292 .. _AlignConsecutiveAssignments:
294 **AlignConsecutiveAssignments** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 3.8` :ref:`¶ <AlignConsecutiveAssignments>`
295   Style of aligning consecutive assignments.
297   ``Consecutive`` will result in formattings like:
299   .. code-block:: c++
301     int a            = 1;
302     int somelongname = 2;
303     double c         = 3;
305   Nested configuration flags:
307   Alignment options.
309   They can also be read as a whole for compatibility. The choices are:
310   - None
311   - Consecutive
312   - AcrossEmptyLines
313   - AcrossComments
314   - AcrossEmptyLinesAndComments
316   For example, to align across empty lines and not across comments, either
317   of these work.
319   .. code-block:: c++
321     AlignConsecutiveMacros: AcrossEmptyLines
323     AlignConsecutiveMacros:
324       Enabled: true
325       AcrossEmptyLines: true
326       AcrossComments: false
328   * ``bool Enabled`` Whether aligning is enabled.
330     .. code-block:: c++
332       #define SHORT_NAME       42
333       #define LONGER_NAME      0x007f
334       #define EVEN_LONGER_NAME (2)
335       #define foo(x)           (x * x)
336       #define bar(y, z)        (y + z)
338       int a            = 1;
339       int somelongname = 2;
340       double c         = 3;
342       int aaaa : 1;
343       int b    : 12;
344       int ccc  : 8;
346       int         aaaa = 12;
347       float       b = 23;
348       std::string ccc;
350   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
352     .. code-block:: c++
354       true:
355       int a            = 1;
356       int somelongname = 2;
357       double c         = 3;
359       int d            = 3;
361       false:
362       int a            = 1;
363       int somelongname = 2;
364       double c         = 3;
366       int d = 3;
368   * ``bool AcrossComments`` Whether to align across comments.
370     .. code-block:: c++
372       true:
373       int d    = 3;
374       /* A comment. */
375       double e = 4;
377       false:
378       int d = 3;
379       /* A comment. */
380       double e = 4;
382   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
383     like ``+=`` are aligned along with ``=``.
385     .. code-block:: c++
387       true:
388       a   &= 2;
389       bbb  = 2;
391       false:
392       a &= 2;
393       bbb = 2;
395   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
396     operators are left-padded to the same length as long ones in order to
397     put all assignment operators to the right of the left hand side.
399     .. code-block:: c++
401       true:
402       a   >>= 2;
403       bbb   = 2;
405       a     = 2;
406       bbb >>= 2;
408       false:
409       a >>= 2;
410       bbb = 2;
412       a     = 2;
413       bbb >>= 2;
416 .. _AlignConsecutiveBitFields:
418 **AlignConsecutiveBitFields** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 11` :ref:`¶ <AlignConsecutiveBitFields>`
419   Style of aligning consecutive bit fields.
421   ``Consecutive`` will align the bitfield separators of consecutive lines.
422   This will result in formattings like:
424   .. code-block:: c++
426     int aaaa : 1;
427     int b    : 12;
428     int ccc  : 8;
430   Nested configuration flags:
432   Alignment options.
434   They can also be read as a whole for compatibility. The choices are:
435   - None
436   - Consecutive
437   - AcrossEmptyLines
438   - AcrossComments
439   - AcrossEmptyLinesAndComments
441   For example, to align across empty lines and not across comments, either
442   of these work.
444   .. code-block:: c++
446     AlignConsecutiveMacros: AcrossEmptyLines
448     AlignConsecutiveMacros:
449       Enabled: true
450       AcrossEmptyLines: true
451       AcrossComments: false
453   * ``bool Enabled`` Whether aligning is enabled.
455     .. code-block:: c++
457       #define SHORT_NAME       42
458       #define LONGER_NAME      0x007f
459       #define EVEN_LONGER_NAME (2)
460       #define foo(x)           (x * x)
461       #define bar(y, z)        (y + z)
463       int a            = 1;
464       int somelongname = 2;
465       double c         = 3;
467       int aaaa : 1;
468       int b    : 12;
469       int ccc  : 8;
471       int         aaaa = 12;
472       float       b = 23;
473       std::string ccc;
475   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
477     .. code-block:: c++
479       true:
480       int a            = 1;
481       int somelongname = 2;
482       double c         = 3;
484       int d            = 3;
486       false:
487       int a            = 1;
488       int somelongname = 2;
489       double c         = 3;
491       int d = 3;
493   * ``bool AcrossComments`` Whether to align across comments.
495     .. code-block:: c++
497       true:
498       int d    = 3;
499       /* A comment. */
500       double e = 4;
502       false:
503       int d = 3;
504       /* A comment. */
505       double e = 4;
507   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
508     like ``+=`` are aligned along with ``=``.
510     .. code-block:: c++
512       true:
513       a   &= 2;
514       bbb  = 2;
516       false:
517       a &= 2;
518       bbb = 2;
520   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
521     operators are left-padded to the same length as long ones in order to
522     put all assignment operators to the right of the left hand side.
524     .. code-block:: c++
526       true:
527       a   >>= 2;
528       bbb   = 2;
530       a     = 2;
531       bbb >>= 2;
533       false:
534       a >>= 2;
535       bbb = 2;
537       a     = 2;
538       bbb >>= 2;
541 .. _AlignConsecutiveDeclarations:
543 **AlignConsecutiveDeclarations** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 3.8` :ref:`¶ <AlignConsecutiveDeclarations>`
544   Style of aligning consecutive declarations.
546   ``Consecutive`` will align the declaration names of consecutive lines.
547   This will result in formattings like:
549   .. code-block:: c++
551     int         aaaa = 12;
552     float       b = 23;
553     std::string ccc;
555   Nested configuration flags:
557   Alignment options.
559   They can also be read as a whole for compatibility. The choices are:
560   - None
561   - Consecutive
562   - AcrossEmptyLines
563   - AcrossComments
564   - AcrossEmptyLinesAndComments
566   For example, to align across empty lines and not across comments, either
567   of these work.
569   .. code-block:: c++
571     AlignConsecutiveMacros: AcrossEmptyLines
573     AlignConsecutiveMacros:
574       Enabled: true
575       AcrossEmptyLines: true
576       AcrossComments: false
578   * ``bool Enabled`` Whether aligning is enabled.
580     .. code-block:: c++
582       #define SHORT_NAME       42
583       #define LONGER_NAME      0x007f
584       #define EVEN_LONGER_NAME (2)
585       #define foo(x)           (x * x)
586       #define bar(y, z)        (y + z)
588       int a            = 1;
589       int somelongname = 2;
590       double c         = 3;
592       int aaaa : 1;
593       int b    : 12;
594       int ccc  : 8;
596       int         aaaa = 12;
597       float       b = 23;
598       std::string ccc;
600   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
602     .. code-block:: c++
604       true:
605       int a            = 1;
606       int somelongname = 2;
607       double c         = 3;
609       int d            = 3;
611       false:
612       int a            = 1;
613       int somelongname = 2;
614       double c         = 3;
616       int d = 3;
618   * ``bool AcrossComments`` Whether to align across comments.
620     .. code-block:: c++
622       true:
623       int d    = 3;
624       /* A comment. */
625       double e = 4;
627       false:
628       int d = 3;
629       /* A comment. */
630       double e = 4;
632   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
633     like ``+=`` are aligned along with ``=``.
635     .. code-block:: c++
637       true:
638       a   &= 2;
639       bbb  = 2;
641       false:
642       a &= 2;
643       bbb = 2;
645   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
646     operators are left-padded to the same length as long ones in order to
647     put all assignment operators to the right of the left hand side.
649     .. code-block:: c++
651       true:
652       a   >>= 2;
653       bbb   = 2;
655       a     = 2;
656       bbb >>= 2;
658       false:
659       a >>= 2;
660       bbb = 2;
662       a     = 2;
663       bbb >>= 2;
666 .. _AlignConsecutiveMacros:
668 **AlignConsecutiveMacros** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 9` :ref:`¶ <AlignConsecutiveMacros>`
669   Style of aligning consecutive macro definitions.
671   ``Consecutive`` will result in formattings like:
673   .. code-block:: c++
675     #define SHORT_NAME       42
676     #define LONGER_NAME      0x007f
677     #define EVEN_LONGER_NAME (2)
678     #define foo(x)           (x * x)
679     #define bar(y, z)        (y + z)
681   Nested configuration flags:
683   Alignment options.
685   They can also be read as a whole for compatibility. The choices are:
686   - None
687   - Consecutive
688   - AcrossEmptyLines
689   - AcrossComments
690   - AcrossEmptyLinesAndComments
692   For example, to align across empty lines and not across comments, either
693   of these work.
695   .. code-block:: c++
697     AlignConsecutiveMacros: AcrossEmptyLines
699     AlignConsecutiveMacros:
700       Enabled: true
701       AcrossEmptyLines: true
702       AcrossComments: false
704   * ``bool Enabled`` Whether aligning is enabled.
706     .. code-block:: c++
708       #define SHORT_NAME       42
709       #define LONGER_NAME      0x007f
710       #define EVEN_LONGER_NAME (2)
711       #define foo(x)           (x * x)
712       #define bar(y, z)        (y + z)
714       int a            = 1;
715       int somelongname = 2;
716       double c         = 3;
718       int aaaa : 1;
719       int b    : 12;
720       int ccc  : 8;
722       int         aaaa = 12;
723       float       b = 23;
724       std::string ccc;
726   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
728     .. code-block:: c++
730       true:
731       int a            = 1;
732       int somelongname = 2;
733       double c         = 3;
735       int d            = 3;
737       false:
738       int a            = 1;
739       int somelongname = 2;
740       double c         = 3;
742       int d = 3;
744   * ``bool AcrossComments`` Whether to align across comments.
746     .. code-block:: c++
748       true:
749       int d    = 3;
750       /* A comment. */
751       double e = 4;
753       false:
754       int d = 3;
755       /* A comment. */
756       double e = 4;
758   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
759     like ``+=`` are aligned along with ``=``.
761     .. code-block:: c++
763       true:
764       a   &= 2;
765       bbb  = 2;
767       false:
768       a &= 2;
769       bbb = 2;
771   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
772     operators are left-padded to the same length as long ones in order to
773     put all assignment operators to the right of the left hand side.
775     .. code-block:: c++
777       true:
778       a   >>= 2;
779       bbb   = 2;
781       a     = 2;
782       bbb >>= 2;
784       false:
785       a >>= 2;
786       bbb = 2;
788       a     = 2;
789       bbb >>= 2;
792 .. _AlignConsecutiveShortCaseStatements:
794 **AlignConsecutiveShortCaseStatements** (``ShortCaseStatementsAlignmentStyle``) :versionbadge:`clang-format 17` :ref:`¶ <AlignConsecutiveShortCaseStatements>`
795   Style of aligning consecutive short case labels.
796   Only applies if ``AllowShortCaseLabelsOnASingleLine`` is ``true``.
799   .. code-block:: yaml
801     # Example of usage:
802     AlignConsecutiveShortCaseStatements:
803       Enabled: true
804       AcrossEmptyLines: true
805       AcrossComments: true
806       AlignCaseColons: false
808   Nested configuration flags:
810   Alignment options.
812   * ``bool Enabled`` Whether aligning is enabled.
814     .. code-block:: c++
816       true:
817       switch (level) {
818       case log::info:    return "info:";
819       case log::warning: return "warning:";
820       default:           return "";
821       }
823       false:
824       switch (level) {
825       case log::info: return "info:";
826       case log::warning: return "warning:";
827       default: return "";
828       }
830   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
832     .. code-block:: c++
834       true:
835       switch (level) {
836       case log::info:    return "info:";
837       case log::warning: return "warning:";
839       default:           return "";
840       }
842       false:
843       switch (level) {
844       case log::info:    return "info:";
845       case log::warning: return "warning:";
847       default: return "";
848       }
850   * ``bool AcrossComments`` Whether to align across comments.
852     .. code-block:: c++
854       true:
855       switch (level) {
856       case log::info:    return "info:";
857       case log::warning: return "warning:";
858       /* A comment. */
859       default:           return "";
860       }
862       false:
863       switch (level) {
864       case log::info:    return "info:";
865       case log::warning: return "warning:";
866       /* A comment. */
867       default: return "";
868       }
870   * ``bool AlignCaseColons`` Whether aligned case labels are aligned on the colon, or on the
871     , or on the tokens after the colon.
873     .. code-block:: c++
875       true:
876       switch (level) {
877       case log::info   : return "info:";
878       case log::warning: return "warning:";
879       default          : return "";
880       }
882       false:
883       switch (level) {
884       case log::info:    return "info:";
885       case log::warning: return "warning:";
886       default:           return "";
887       }
890 .. _AlignEscapedNewlines:
892 **AlignEscapedNewlines** (``EscapedNewlineAlignmentStyle``) :versionbadge:`clang-format 5` :ref:`¶ <AlignEscapedNewlines>`
893   Options for aligning backslashes in escaped newlines.
895   Possible values:
897   * ``ENAS_DontAlign`` (in configuration: ``DontAlign``)
898     Don't align escaped newlines.
900     .. code-block:: c++
902       #define A \
903         int aaaa; \
904         int b; \
905         int dddddddddd;
907   * ``ENAS_Left`` (in configuration: ``Left``)
908     Align escaped newlines as far left as possible.
910     .. code-block:: c++
912       true:
913       #define A   \
914         int aaaa; \
915         int b;    \
916         int dddddddddd;
918       false:
920   * ``ENAS_Right`` (in configuration: ``Right``)
921     Align escaped newlines in the right-most column.
923     .. code-block:: c++
925       #define A                                                                      \
926         int aaaa;                                                                    \
927         int b;                                                                       \
928         int dddddddddd;
932 .. _AlignOperands:
934 **AlignOperands** (``OperandAlignmentStyle``) :versionbadge:`clang-format 3.5` :ref:`¶ <AlignOperands>`
935   If ``true``, horizontally align operands of binary and ternary
936   expressions.
938   Possible values:
940   * ``OAS_DontAlign`` (in configuration: ``DontAlign``)
941     Do not align operands of binary and ternary expressions.
942     The wrapped lines are indented ``ContinuationIndentWidth`` spaces from
943     the start of the line.
945   * ``OAS_Align`` (in configuration: ``Align``)
946     Horizontally align operands of binary and ternary expressions.
948     Specifically, this aligns operands of a single expression that needs
949     to be split over multiple lines, e.g.:
951     .. code-block:: c++
953       int aaa = bbbbbbbbbbbbbbb +
954                 ccccccccccccccc;
956     When ``BreakBeforeBinaryOperators`` is set, the wrapped operator is
957     aligned with the operand on the first line.
959     .. code-block:: c++
961       int aaa = bbbbbbbbbbbbbbb
962                 + ccccccccccccccc;
964   * ``OAS_AlignAfterOperator`` (in configuration: ``AlignAfterOperator``)
965     Horizontally align operands of binary and ternary expressions.
967     This is similar to ``AO_Align``, except when
968     ``BreakBeforeBinaryOperators`` is set, the operator is un-indented so
969     that the wrapped operand is aligned with the operand on the first line.
971     .. code-block:: c++
973       int aaa = bbbbbbbbbbbbbbb
974               + ccccccccccccccc;
978 .. _AlignTrailingComments:
980 **AlignTrailingComments** (``TrailingCommentsAlignmentStyle``) :versionbadge:`clang-format 3.7` :ref:`¶ <AlignTrailingComments>`
981   Control of trailing comments.
983   The alignment stops at closing braces after a line break, and only
984   followed by other closing braces, a (``do-``) ``while``, a lambda call, or
985   a semicolon.
988   .. note::
990    As of clang-format 16 this option is not a bool but can be set
991    to the options. Conventional bool options still can be parsed as before.
994   .. code-block:: yaml
996     # Example of usage:
997     AlignTrailingComments:
998       Kind: Always
999       OverEmptyLines: 2
1001   Nested configuration flags:
1003   Alignment options
1005   * ``TrailingCommentsAlignmentKinds Kind``
1006     Specifies the way to align trailing comments.
1008     Possible values:
1010     * ``TCAS_Leave`` (in configuration: ``Leave``)
1011       Leave trailing comments as they are.
1013       .. code-block:: c++
1015         int a;    // comment
1016         int ab;       // comment
1018         int abc;  // comment
1019         int abcd;     // comment
1021     * ``TCAS_Always`` (in configuration: ``Always``)
1022       Align trailing comments.
1024       .. code-block:: c++
1026         int a;  // comment
1027         int ab; // comment
1029         int abc;  // comment
1030         int abcd; // comment
1032     * ``TCAS_Never`` (in configuration: ``Never``)
1033       Don't align trailing comments but other formatter applies.
1035       .. code-block:: c++
1037         int a; // comment
1038         int ab; // comment
1040         int abc; // comment
1041         int abcd; // comment
1044   * ``unsigned OverEmptyLines`` How many empty lines to apply alignment.
1045     When both ``MaxEmptyLinesToKeep`` and ``OverEmptyLines`` are set to 2,
1046     it formats like below.
1048     .. code-block:: c++
1050       int a;      // all these
1052       int ab;     // comments are
1055       int abcdef; // aligned
1057     When ``MaxEmptyLinesToKeep`` is set to 2 and ``OverEmptyLines`` is set
1058     to 1, it formats like below.
1060     .. code-block:: c++
1062       int a;  // these are
1064       int ab; // aligned
1067       int abcdef; // but this isn't
1070 .. _AllowAllArgumentsOnNextLine:
1072 **AllowAllArgumentsOnNextLine** (``Boolean``) :versionbadge:`clang-format 9` :ref:`¶ <AllowAllArgumentsOnNextLine>`
1073   If a function call or braced initializer list doesn't fit on a
1074   line, allow putting all arguments onto the next line, even if
1075   ``BinPackArguments`` is ``false``.
1077   .. code-block:: c++
1079     true:
1080     callFunction(
1081         a, b, c, d);
1083     false:
1084     callFunction(a,
1085                  b,
1086                  c,
1087                  d);
1089 .. _AllowAllConstructorInitializersOnNextLine:
1091 **AllowAllConstructorInitializersOnNextLine** (``Boolean``) :versionbadge:`clang-format 9` :ref:`¶ <AllowAllConstructorInitializersOnNextLine>`
1092   This option is **deprecated**. See ``NextLine`` of
1093   ``PackConstructorInitializers``.
1095 .. _AllowAllParametersOfDeclarationOnNextLine:
1097 **AllowAllParametersOfDeclarationOnNextLine** (``Boolean``) :versionbadge:`clang-format 3.3` :ref:`¶ <AllowAllParametersOfDeclarationOnNextLine>`
1098   If the function declaration doesn't fit on a line,
1099   allow putting all parameters of a function declaration onto
1100   the next line even if ``BinPackParameters`` is ``false``.
1102   .. code-block:: c++
1104     true:
1105     void myFunction(
1106         int a, int b, int c, int d, int e);
1108     false:
1109     void myFunction(int a,
1110                     int b,
1111                     int c,
1112                     int d,
1113                     int e);
1115 .. _AllowBreakBeforeNoexceptSpecifier:
1117 **AllowBreakBeforeNoexceptSpecifier** (``BreakBeforeNoexceptSpecifierStyle``) :versionbadge:`clang-format 18` :ref:`¶ <AllowBreakBeforeNoexceptSpecifier>`
1118   Controls if there could be a line break before a ``noexcept`` specifier.
1120   Possible values:
1122   * ``BBNSS_Never`` (in configuration: ``Never``)
1123     No line break allowed.
1125     .. code-block:: c++
1127       void foo(int arg1,
1128                double arg2) noexcept;
1130       void bar(int arg1, double arg2) noexcept(
1131           noexcept(baz(arg1)) &&
1132           noexcept(baz(arg2)));
1134   * ``BBNSS_OnlyWithParen`` (in configuration: ``OnlyWithParen``)
1135     For a simple ``noexcept`` there is no line break allowed, but when we
1136     have a condition it is.
1138     .. code-block:: c++
1140       void foo(int arg1,
1141                double arg2) noexcept;
1143       void bar(int arg1, double arg2)
1144           noexcept(noexcept(baz(arg1)) &&
1145                    noexcept(baz(arg2)));
1147   * ``BBNSS_Always`` (in configuration: ``Always``)
1148     Line breaks are allowed. But note that because of the associated
1149     penalties ``clang-format`` often prefers not to break before the
1150     ``noexcept``.
1152     .. code-block:: c++
1154       void foo(int arg1,
1155                double arg2) noexcept;
1157       void bar(int arg1, double arg2)
1158           noexcept(noexcept(baz(arg1)) &&
1159                    noexcept(baz(arg2)));
1163 .. _AllowShortBlocksOnASingleLine:
1165 **AllowShortBlocksOnASingleLine** (``ShortBlockStyle``) :versionbadge:`clang-format 3.5` :ref:`¶ <AllowShortBlocksOnASingleLine>`
1166   Dependent on the value, ``while (true) { continue; }`` can be put on a
1167   single line.
1169   Possible values:
1171   * ``SBS_Never`` (in configuration: ``Never``)
1172     Never merge blocks into a single line.
1174     .. code-block:: c++
1176       while (true) {
1177       }
1178       while (true) {
1179         continue;
1180       }
1182   * ``SBS_Empty`` (in configuration: ``Empty``)
1183     Only merge empty blocks.
1185     .. code-block:: c++
1187       while (true) {}
1188       while (true) {
1189         continue;
1190       }
1192   * ``SBS_Always`` (in configuration: ``Always``)
1193     Always merge short blocks into a single line.
1195     .. code-block:: c++
1197       while (true) {}
1198       while (true) { continue; }
1202 .. _AllowShortCaseLabelsOnASingleLine:
1204 **AllowShortCaseLabelsOnASingleLine** (``Boolean``) :versionbadge:`clang-format 3.6` :ref:`¶ <AllowShortCaseLabelsOnASingleLine>`
1205   If ``true``, short case labels will be contracted to a single line.
1207   .. code-block:: c++
1209     true:                                   false:
1210     switch (a) {                    vs.     switch (a) {
1211     case 1: x = 1; break;                   case 1:
1212     case 2: return;                           x = 1;
1213     }                                         break;
1214                                             case 2:
1215                                               return;
1216                                             }
1218 .. _AllowShortCompoundRequirementOnASingleLine:
1220 **AllowShortCompoundRequirementOnASingleLine** (``Boolean``) :versionbadge:`clang-format 18` :ref:`¶ <AllowShortCompoundRequirementOnASingleLine>`
1221   Allow short compound requirement on a single line.
1223   .. code-block:: c++
1225     true:
1226     template <typename T>
1227     concept c = requires(T x) {
1228       { x + 1 } -> std::same_as<int>;
1229     };
1231     false:
1232     template <typename T>
1233     concept c = requires(T x) {
1234       {
1235         x + 1
1236       } -> std::same_as<int>;
1237     };
1239 .. _AllowShortEnumsOnASingleLine:
1241 **AllowShortEnumsOnASingleLine** (``Boolean``) :versionbadge:`clang-format 11` :ref:`¶ <AllowShortEnumsOnASingleLine>`
1242   Allow short enums on a single line.
1244   .. code-block:: c++
1246     true:
1247     enum { A, B } myEnum;
1249     false:
1250     enum {
1251       A,
1252       B
1253     } myEnum;
1255 .. _AllowShortFunctionsOnASingleLine:
1257 **AllowShortFunctionsOnASingleLine** (``ShortFunctionStyle``) :versionbadge:`clang-format 3.5` :ref:`¶ <AllowShortFunctionsOnASingleLine>`
1258   Dependent on the value, ``int f() { return 0; }`` can be put on a
1259   single line.
1261   Possible values:
1263   * ``SFS_None`` (in configuration: ``None``)
1264     Never merge functions into a single line.
1266   * ``SFS_InlineOnly`` (in configuration: ``InlineOnly``)
1267     Only merge functions defined inside a class. Same as "inline",
1268     except it does not implies "empty": i.e. top level empty functions
1269     are not merged either.
1271     .. code-block:: c++
1273       class Foo {
1274         void f() { foo(); }
1275       };
1276       void f() {
1277         foo();
1278       }
1279       void f() {
1280       }
1282   * ``SFS_Empty`` (in configuration: ``Empty``)
1283     Only merge empty functions.
1285     .. code-block:: c++
1287       void f() {}
1288       void f2() {
1289         bar2();
1290       }
1292   * ``SFS_Inline`` (in configuration: ``Inline``)
1293     Only merge functions defined inside a class. Implies "empty".
1295     .. code-block:: c++
1297       class Foo {
1298         void f() { foo(); }
1299       };
1300       void f() {
1301         foo();
1302       }
1303       void f() {}
1305   * ``SFS_All`` (in configuration: ``All``)
1306     Merge all functions fitting on a single line.
1308     .. code-block:: c++
1310       class Foo {
1311         void f() { foo(); }
1312       };
1313       void f() { bar(); }
1317 .. _AllowShortIfStatementsOnASingleLine:
1319 **AllowShortIfStatementsOnASingleLine** (``ShortIfStyle``) :versionbadge:`clang-format 3.3` :ref:`¶ <AllowShortIfStatementsOnASingleLine>`
1320   Dependent on the value, ``if (a) return;`` can be put on a single line.
1322   Possible values:
1324   * ``SIS_Never`` (in configuration: ``Never``)
1325     Never put short ifs on the same line.
1327     .. code-block:: c++
1329       if (a)
1330         return;
1332       if (b)
1333         return;
1334       else
1335         return;
1337       if (c)
1338         return;
1339       else {
1340         return;
1341       }
1343   * ``SIS_WithoutElse`` (in configuration: ``WithoutElse``)
1344     Put short ifs on the same line only if there is no else statement.
1346     .. code-block:: c++
1348       if (a) return;
1350       if (b)
1351         return;
1352       else
1353         return;
1355       if (c)
1356         return;
1357       else {
1358         return;
1359       }
1361   * ``SIS_OnlyFirstIf`` (in configuration: ``OnlyFirstIf``)
1362     Put short ifs, but not else ifs nor else statements, on the same line.
1364     .. code-block:: c++
1366       if (a) return;
1368       if (b) return;
1369       else if (b)
1370         return;
1371       else
1372         return;
1374       if (c) return;
1375       else {
1376         return;
1377       }
1379   * ``SIS_AllIfsAndElse`` (in configuration: ``AllIfsAndElse``)
1380     Always put short ifs, else ifs and else statements on the same
1381     line.
1383     .. code-block:: c++
1385       if (a) return;
1387       if (b) return;
1388       else return;
1390       if (c) return;
1391       else {
1392         return;
1393       }
1397 .. _AllowShortLambdasOnASingleLine:
1399 **AllowShortLambdasOnASingleLine** (``ShortLambdaStyle``) :versionbadge:`clang-format 9` :ref:`¶ <AllowShortLambdasOnASingleLine>`
1400   Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
1401   single line.
1403   Possible values:
1405   * ``SLS_None`` (in configuration: ``None``)
1406     Never merge lambdas into a single line.
1408   * ``SLS_Empty`` (in configuration: ``Empty``)
1409     Only merge empty lambdas.
1411     .. code-block:: c++
1413       auto lambda = [](int a) {};
1414       auto lambda2 = [](int a) {
1415           return a;
1416       };
1418   * ``SLS_Inline`` (in configuration: ``Inline``)
1419     Merge lambda into a single line if the lambda is argument of a function.
1421     .. code-block:: c++
1423       auto lambda = [](int x, int y) {
1424           return x < y;
1425       };
1426       sort(a.begin(), a.end(), [](int x, int y) { return x < y; });
1428   * ``SLS_All`` (in configuration: ``All``)
1429     Merge all lambdas fitting on a single line.
1431     .. code-block:: c++
1433       auto lambda = [](int a) {};
1434       auto lambda2 = [](int a) { return a; };
1438 .. _AllowShortLoopsOnASingleLine:
1440 **AllowShortLoopsOnASingleLine** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <AllowShortLoopsOnASingleLine>`
1441   If ``true``, ``while (true) continue;`` can be put on a single
1442   line.
1444 .. _AlwaysBreakAfterDefinitionReturnType:
1446 **AlwaysBreakAfterDefinitionReturnType** (``DefinitionReturnTypeBreakingStyle``) :versionbadge:`clang-format 3.7` :ref:`¶ <AlwaysBreakAfterDefinitionReturnType>`
1447   The function definition return type breaking style to use.  This
1448   option is **deprecated** and is retained for backwards compatibility.
1450   Possible values:
1452   * ``DRTBS_None`` (in configuration: ``None``)
1453     Break after return type automatically.
1454     ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
1456   * ``DRTBS_All`` (in configuration: ``All``)
1457     Always break after the return type.
1459   * ``DRTBS_TopLevel`` (in configuration: ``TopLevel``)
1460     Always break after the return types of top-level functions.
1464 .. _AlwaysBreakAfterReturnType:
1466 **AlwaysBreakAfterReturnType** (``ReturnTypeBreakingStyle``) :versionbadge:`clang-format 3.8` :ref:`¶ <AlwaysBreakAfterReturnType>`
1467   The function declaration return type breaking style to use.
1469   Possible values:
1471   * ``RTBS_None`` (in configuration: ``None``)
1472     Break after return type automatically.
1473     ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
1475     .. code-block:: c++
1477       class A {
1478         int f() { return 0; };
1479       };
1480       int f();
1481       int f() { return 1; }
1483   * ``RTBS_All`` (in configuration: ``All``)
1484     Always break after the return type.
1486     .. code-block:: c++
1488       class A {
1489         int
1490         f() {
1491           return 0;
1492         };
1493       };
1494       int
1495       f();
1496       int
1497       f() {
1498         return 1;
1499       }
1501   * ``RTBS_TopLevel`` (in configuration: ``TopLevel``)
1502     Always break after the return types of top-level functions.
1504     .. code-block:: c++
1506       class A {
1507         int f() { return 0; };
1508       };
1509       int
1510       f();
1511       int
1512       f() {
1513         return 1;
1514       }
1516   * ``RTBS_AllDefinitions`` (in configuration: ``AllDefinitions``)
1517     Always break after the return type of function definitions.
1519     .. code-block:: c++
1521       class A {
1522         int
1523         f() {
1524           return 0;
1525         };
1526       };
1527       int f();
1528       int
1529       f() {
1530         return 1;
1531       }
1533   * ``RTBS_TopLevelDefinitions`` (in configuration: ``TopLevelDefinitions``)
1534     Always break after the return type of top-level definitions.
1536     .. code-block:: c++
1538       class A {
1539         int f() { return 0; };
1540       };
1541       int f();
1542       int
1543       f() {
1544         return 1;
1545       }
1549 .. _AlwaysBreakBeforeMultilineStrings:
1551 **AlwaysBreakBeforeMultilineStrings** (``Boolean``) :versionbadge:`clang-format 3.4` :ref:`¶ <AlwaysBreakBeforeMultilineStrings>`
1552   If ``true``, always break before multiline string literals.
1554   This flag is mean to make cases where there are multiple multiline strings
1555   in a file look more consistent. Thus, it will only take effect if wrapping
1556   the string at that point leads to it being indented
1557   ``ContinuationIndentWidth`` spaces from the start of the line.
1559   .. code-block:: c++
1561      true:                                  false:
1562      aaaa =                         vs.     aaaa = "bbbb"
1563          "bbbb"                                    "cccc";
1564          "cccc";
1566 .. _AlwaysBreakTemplateDeclarations:
1568 **AlwaysBreakTemplateDeclarations** (``BreakTemplateDeclarationsStyle``) :versionbadge:`clang-format 3.4` :ref:`¶ <AlwaysBreakTemplateDeclarations>`
1569   The template declaration breaking style to use.
1571   Possible values:
1573   * ``BTDS_No`` (in configuration: ``No``)
1574     Do not force break before declaration.
1575     ``PenaltyBreakTemplateDeclaration`` is taken into account.
1577     .. code-block:: c++
1579        template <typename T> T foo() {
1580        }
1581        template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
1582                                    int bbbbbbbbbbbbbbbbbbbbb) {
1583        }
1585   * ``BTDS_MultiLine`` (in configuration: ``MultiLine``)
1586     Force break after template declaration only when the following
1587     declaration spans multiple lines.
1589     .. code-block:: c++
1591        template <typename T> T foo() {
1592        }
1593        template <typename T>
1594        T foo(int aaaaaaaaaaaaaaaaaaaaa,
1595              int bbbbbbbbbbbbbbbbbbbbb) {
1596        }
1598   * ``BTDS_Yes`` (in configuration: ``Yes``)
1599     Always break after template declaration.
1601     .. code-block:: c++
1603        template <typename T>
1604        T foo() {
1605        }
1606        template <typename T>
1607        T foo(int aaaaaaaaaaaaaaaaaaaaa,
1608              int bbbbbbbbbbbbbbbbbbbbb) {
1609        }
1613 .. _AttributeMacros:
1615 **AttributeMacros** (``List of Strings``) :versionbadge:`clang-format 12` :ref:`¶ <AttributeMacros>`
1616   A vector of strings that should be interpreted as attributes/qualifiers
1617   instead of identifiers. This can be useful for language extensions or
1618   static analyzer annotations.
1620   For example:
1622   .. code-block:: c++
1624     x = (char *__capability)&y;
1625     int function(void) __unused;
1626     void only_writes_to_buffer(char *__output buffer);
1628   In the .clang-format configuration file, this can be configured like:
1630   .. code-block:: yaml
1632     AttributeMacros: ['__capability', '__output', '__unused']
1634 .. _BinPackArguments:
1636 **BinPackArguments** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <BinPackArguments>`
1637   If ``false``, a function call's arguments will either be all on the
1638   same line or will have one line each.
1640   .. code-block:: c++
1642     true:
1643     void f() {
1644       f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
1645         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
1646     }
1648     false:
1649     void f() {
1650       f(aaaaaaaaaaaaaaaaaaaa,
1651         aaaaaaaaaaaaaaaaaaaa,
1652         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
1653     }
1655 .. _BinPackParameters:
1657 **BinPackParameters** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <BinPackParameters>`
1658   If ``false``, a function declaration's or function definition's
1659   parameters will either all be on the same line or will have one line each.
1661   .. code-block:: c++
1663     true:
1664     void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
1665            int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
1667     false:
1668     void f(int aaaaaaaaaaaaaaaaaaaa,
1669            int aaaaaaaaaaaaaaaaaaaa,
1670            int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
1672 .. _BitFieldColonSpacing:
1674 **BitFieldColonSpacing** (``BitFieldColonSpacingStyle``) :versionbadge:`clang-format 12` :ref:`¶ <BitFieldColonSpacing>`
1675   The BitFieldColonSpacingStyle to use for bitfields.
1677   Possible values:
1679   * ``BFCS_Both`` (in configuration: ``Both``)
1680     Add one space on each side of the ``:``
1682     .. code-block:: c++
1684       unsigned bf : 2;
1686   * ``BFCS_None`` (in configuration: ``None``)
1687     Add no space around the ``:`` (except when needed for
1688     ``AlignConsecutiveBitFields``).
1690     .. code-block:: c++
1692       unsigned bf:2;
1694   * ``BFCS_Before`` (in configuration: ``Before``)
1695     Add space before the ``:`` only
1697     .. code-block:: c++
1699       unsigned bf :2;
1701   * ``BFCS_After`` (in configuration: ``After``)
1702     Add space after the ``:`` only (space may be added before if
1703     needed for ``AlignConsecutiveBitFields``).
1705     .. code-block:: c++
1707       unsigned bf: 2;
1711 .. _BraceWrapping:
1713 **BraceWrapping** (``BraceWrappingFlags``) :versionbadge:`clang-format 3.8` :ref:`¶ <BraceWrapping>`
1714   Control of individual brace wrapping cases.
1716   If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
1717   each individual brace case should be handled. Otherwise, this is ignored.
1719   .. code-block:: yaml
1721     # Example of usage:
1722     BreakBeforeBraces: Custom
1723     BraceWrapping:
1724       AfterEnum: true
1725       AfterStruct: false
1726       SplitEmptyFunction: false
1728   Nested configuration flags:
1730   Precise control over the wrapping of braces.
1732   .. code-block:: c++
1734     # Should be declared this way:
1735     BreakBeforeBraces: Custom
1736     BraceWrapping:
1737         AfterClass: true
1739   * ``bool AfterCaseLabel`` Wrap case labels.
1741     .. code-block:: c++
1743       false:                                true:
1744       switch (foo) {                vs.     switch (foo) {
1745         case 1: {                             case 1:
1746           bar();                              {
1747           break;                                bar();
1748         }                                       break;
1749         default: {                            }
1750           plop();                             default:
1751         }                                     {
1752       }                                         plop();
1753                                               }
1754                                             }
1756   * ``bool AfterClass`` Wrap class definitions.
1758     .. code-block:: c++
1760       true:
1761       class foo
1762       {};
1764       false:
1765       class foo {};
1767   * ``BraceWrappingAfterControlStatementStyle AfterControlStatement``
1768     Wrap control statements (``if``/``for``/``while``/``switch``/..).
1770     Possible values:
1772     * ``BWACS_Never`` (in configuration: ``Never``)
1773       Never wrap braces after a control statement.
1775       .. code-block:: c++
1777         if (foo()) {
1778         } else {
1779         }
1780         for (int i = 0; i < 10; ++i) {
1781         }
1783     * ``BWACS_MultiLine`` (in configuration: ``MultiLine``)
1784       Only wrap braces after a multi-line control statement.
1786       .. code-block:: c++
1788         if (foo && bar &&
1789             baz)
1790         {
1791           quux();
1792         }
1793         while (foo || bar) {
1794         }
1796     * ``BWACS_Always`` (in configuration: ``Always``)
1797       Always wrap braces after a control statement.
1799       .. code-block:: c++
1801         if (foo())
1802         {
1803         } else
1804         {}
1805         for (int i = 0; i < 10; ++i)
1806         {}
1809   * ``bool AfterEnum`` Wrap enum definitions.
1811     .. code-block:: c++
1813       true:
1814       enum X : int
1815       {
1816         B
1817       };
1819       false:
1820       enum X : int { B };
1822   * ``bool AfterFunction`` Wrap function definitions.
1824     .. code-block:: c++
1826       true:
1827       void foo()
1828       {
1829         bar();
1830         bar2();
1831       }
1833       false:
1834       void foo() {
1835         bar();
1836         bar2();
1837       }
1839   * ``bool AfterNamespace`` Wrap namespace definitions.
1841     .. code-block:: c++
1843       true:
1844       namespace
1845       {
1846       int foo();
1847       int bar();
1848       }
1850       false:
1851       namespace {
1852       int foo();
1853       int bar();
1854       }
1856   * ``bool AfterObjCDeclaration`` Wrap ObjC definitions (interfaces, implementations...).
1858     .. note::
1860      @autoreleasepool and @synchronized blocks are wrapped
1861      according to ``AfterControlStatement`` flag.
1863   * ``bool AfterStruct`` Wrap struct definitions.
1865     .. code-block:: c++
1867       true:
1868       struct foo
1869       {
1870         int x;
1871       };
1873       false:
1874       struct foo {
1875         int x;
1876       };
1878   * ``bool AfterUnion`` Wrap union definitions.
1880     .. code-block:: c++
1882       true:
1883       union foo
1884       {
1885         int x;
1886       }
1888       false:
1889       union foo {
1890         int x;
1891       }
1893   * ``bool AfterExternBlock`` Wrap extern blocks.
1895     .. code-block:: c++
1897       true:
1898       extern "C"
1899       {
1900         int foo();
1901       }
1903       false:
1904       extern "C" {
1905       int foo();
1906       }
1908   * ``bool BeforeCatch`` Wrap before ``catch``.
1910     .. code-block:: c++
1912       true:
1913       try {
1914         foo();
1915       }
1916       catch () {
1917       }
1919       false:
1920       try {
1921         foo();
1922       } catch () {
1923       }
1925   * ``bool BeforeElse`` Wrap before ``else``.
1927     .. code-block:: c++
1929       true:
1930       if (foo()) {
1931       }
1932       else {
1933       }
1935       false:
1936       if (foo()) {
1937       } else {
1938       }
1940   * ``bool BeforeLambdaBody`` Wrap lambda block.
1942     .. code-block:: c++
1944       true:
1945       connect(
1946         []()
1947         {
1948           foo();
1949           bar();
1950         });
1952       false:
1953       connect([]() {
1954         foo();
1955         bar();
1956       });
1958   * ``bool BeforeWhile`` Wrap before ``while``.
1960     .. code-block:: c++
1962       true:
1963       do {
1964         foo();
1965       }
1966       while (1);
1968       false:
1969       do {
1970         foo();
1971       } while (1);
1973   * ``bool IndentBraces`` Indent the wrapped braces themselves.
1975   * ``bool SplitEmptyFunction`` If ``false``, empty function body can be put on a single line.
1976     This option is used only if the opening brace of the function has
1977     already been wrapped, i.e. the ``AfterFunction`` brace wrapping mode is
1978     set, and the function could/should not be put on a single line (as per
1979     ``AllowShortFunctionsOnASingleLine`` and constructor formatting
1980     options).
1982     .. code-block:: c++
1984       false:          true:
1985       int f()   vs.   int f()
1986       {}              {
1987                       }
1989   * ``bool SplitEmptyRecord`` If ``false``, empty record (e.g. class, struct or union) body
1990     can be put on a single line. This option is used only if the opening
1991     brace of the record has already been wrapped, i.e. the ``AfterClass``
1992     (for classes) brace wrapping mode is set.
1994     .. code-block:: c++
1996       false:           true:
1997       class Foo   vs.  class Foo
1998       {}               {
1999                        }
2001   * ``bool SplitEmptyNamespace`` If ``false``, empty namespace body can be put on a single line.
2002     This option is used only if the opening brace of the namespace has
2003     already been wrapped, i.e. the ``AfterNamespace`` brace wrapping mode is
2004     set.
2006     .. code-block:: c++
2008       false:               true:
2009       namespace Foo   vs.  namespace Foo
2010       {}                   {
2011                            }
2014 .. _BracedInitializerIndentWidth:
2016 **BracedInitializerIndentWidth** (``Unsigned``) :versionbadge:`clang-format 17` :ref:`¶ <BracedInitializerIndentWidth>`
2017   The number of columns to use to indent the contents of braced init lists.
2018   If unset, ``ContinuationIndentWidth`` is used.
2020   .. code-block:: c++
2022     AlignAfterOpenBracket: AlwaysBreak
2023     BracedInitializerIndentWidth: 2
2025     void f() {
2026       SomeClass c{
2027         "foo",
2028         "bar",
2029         "baz",
2030       };
2031       auto s = SomeStruct{
2032         .foo = "foo",
2033         .bar = "bar",
2034         .baz = "baz",
2035       };
2036       SomeArrayT a[3] = {
2037         {
2038           foo,
2039           bar,
2040         },
2041         {
2042           foo,
2043           bar,
2044         },
2045         SomeArrayT{},
2046       };
2047     }
2049 .. _BreakAfterAttributes:
2051 **BreakAfterAttributes** (``AttributeBreakingStyle``) :versionbadge:`clang-format 16` :ref:`¶ <BreakAfterAttributes>`
2052   Break after a group of C++11 attributes before a function
2053   declaration/definition name.
2055   Possible values:
2057   * ``ABS_Always`` (in configuration: ``Always``)
2058     Always break after attributes.
2060     .. code-block:: c++
2062       [[nodiscard]]
2063       inline int f();
2064       [[gnu::const]] [[nodiscard]]
2065       int g();
2067   * ``ABS_Leave`` (in configuration: ``Leave``)
2068     Leave the line breaking after attributes as is.
2070     .. code-block:: c++
2072       [[nodiscard]] inline int f();
2073       [[gnu::const]] [[nodiscard]]
2074       int g();
2076   * ``ABS_Never`` (in configuration: ``Never``)
2077     Never break after attributes.
2079     .. code-block:: c++
2081       [[nodiscard]] inline int f();
2082       [[gnu::const]] [[nodiscard]] int g();
2086 .. _BreakAfterJavaFieldAnnotations:
2088 **BreakAfterJavaFieldAnnotations** (``Boolean``) :versionbadge:`clang-format 3.8` :ref:`¶ <BreakAfterJavaFieldAnnotations>`
2089   Break after each annotation on a field in Java files.
2091   .. code-block:: java
2093      true:                                  false:
2094      @Partial                       vs.     @Partial @Mock DataLoad loader;
2095      @Mock
2096      DataLoad loader;
2098 .. _BreakArrays:
2100 **BreakArrays** (``Boolean``) :versionbadge:`clang-format 16` :ref:`¶ <BreakArrays>`
2101   If ``true``, clang-format will always break after a Json array ``[``
2102   otherwise it will scan until the closing ``]`` to determine if it should
2103   add newlines between elements (prettier compatible).
2106   .. note::
2108    This is currently only for formatting JSON.
2110   .. code-block:: c++
2112      true:                                  false:
2113      [                          vs.      [1, 2, 3, 4]
2114        1,
2115        2,
2116        3,
2117        4
2118      ]
2120 .. _BreakBeforeBinaryOperators:
2122 **BreakBeforeBinaryOperators** (``BinaryOperatorStyle``) :versionbadge:`clang-format 3.6` :ref:`¶ <BreakBeforeBinaryOperators>`
2123   The way to wrap binary operators.
2125   Possible values:
2127   * ``BOS_None`` (in configuration: ``None``)
2128     Break after operators.
2130     .. code-block:: c++
2132        LooooooooooongType loooooooooooooooooooooongVariable =
2133            someLooooooooooooooooongFunction();
2135        bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
2136                             aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
2137                         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
2138                     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
2139                         ccccccccccccccccccccccccccccccccccccccccc;
2141   * ``BOS_NonAssignment`` (in configuration: ``NonAssignment``)
2142     Break before operators that aren't assignments.
2144     .. code-block:: c++
2146        LooooooooooongType loooooooooooooooooooooongVariable =
2147            someLooooooooooooooooongFunction();
2149        bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2150                             + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2151                         == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2152                     && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2153                            > ccccccccccccccccccccccccccccccccccccccccc;
2155   * ``BOS_All`` (in configuration: ``All``)
2156     Break before operators.
2158     .. code-block:: c++
2160        LooooooooooongType loooooooooooooooooooooongVariable
2161            = someLooooooooooooooooongFunction();
2163        bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2164                             + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2165                         == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2166                     && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2167                            > ccccccccccccccccccccccccccccccccccccccccc;
2171 .. _BreakBeforeBraces:
2173 **BreakBeforeBraces** (``BraceBreakingStyle``) :versionbadge:`clang-format 3.7` :ref:`¶ <BreakBeforeBraces>`
2174   The brace breaking style to use.
2176   Possible values:
2178   * ``BS_Attach`` (in configuration: ``Attach``)
2179     Always attach braces to surrounding context.
2181     .. code-block:: c++
2183       namespace N {
2184       enum E {
2185         E1,
2186         E2,
2187       };
2189       class C {
2190       public:
2191         C();
2192       };
2194       bool baz(int i) {
2195         try {
2196           do {
2197             switch (i) {
2198             case 1: {
2199               foobar();
2200               break;
2201             }
2202             default: {
2203               break;
2204             }
2205             }
2206           } while (--i);
2207           return true;
2208         } catch (...) {
2209           handleError();
2210           return false;
2211         }
2212       }
2214       void foo(bool b) {
2215         if (b) {
2216           baz(2);
2217         } else {
2218           baz(5);
2219         }
2220       }
2222       void bar() { foo(true); }
2223       } // namespace N
2225   * ``BS_Linux`` (in configuration: ``Linux``)
2226     Like ``Attach``, but break before braces on function, namespace and
2227     class definitions.
2229     .. code-block:: c++
2231       namespace N
2232       {
2233       enum E {
2234         E1,
2235         E2,
2236       };
2238       class C
2239       {
2240       public:
2241         C();
2242       };
2244       bool baz(int i)
2245       {
2246         try {
2247           do {
2248             switch (i) {
2249             case 1: {
2250               foobar();
2251               break;
2252             }
2253             default: {
2254               break;
2255             }
2256             }
2257           } while (--i);
2258           return true;
2259         } catch (...) {
2260           handleError();
2261           return false;
2262         }
2263       }
2265       void foo(bool b)
2266       {
2267         if (b) {
2268           baz(2);
2269         } else {
2270           baz(5);
2271         }
2272       }
2274       void bar() { foo(true); }
2275       } // namespace N
2277   * ``BS_Mozilla`` (in configuration: ``Mozilla``)
2278     Like ``Attach``, but break before braces on enum, function, and record
2279     definitions.
2281     .. code-block:: c++
2283       namespace N {
2284       enum E
2285       {
2286         E1,
2287         E2,
2288       };
2290       class C
2291       {
2292       public:
2293         C();
2294       };
2296       bool baz(int i)
2297       {
2298         try {
2299           do {
2300             switch (i) {
2301             case 1: {
2302               foobar();
2303               break;
2304             }
2305             default: {
2306               break;
2307             }
2308             }
2309           } while (--i);
2310           return true;
2311         } catch (...) {
2312           handleError();
2313           return false;
2314         }
2315       }
2317       void foo(bool b)
2318       {
2319         if (b) {
2320           baz(2);
2321         } else {
2322           baz(5);
2323         }
2324       }
2326       void bar() { foo(true); }
2327       } // namespace N
2329   * ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
2330     Like ``Attach``, but break before function definitions, ``catch``, and
2331     ``else``.
2333     .. code-block:: c++
2335       namespace N {
2336       enum E {
2337         E1,
2338         E2,
2339       };
2341       class C {
2342       public:
2343         C();
2344       };
2346       bool baz(int i)
2347       {
2348         try {
2349           do {
2350             switch (i) {
2351             case 1: {
2352               foobar();
2353               break;
2354             }
2355             default: {
2356               break;
2357             }
2358             }
2359           } while (--i);
2360           return true;
2361         }
2362         catch (...) {
2363           handleError();
2364           return false;
2365         }
2366       }
2368       void foo(bool b)
2369       {
2370         if (b) {
2371           baz(2);
2372         }
2373         else {
2374           baz(5);
2375         }
2376       }
2378       void bar() { foo(true); }
2379       } // namespace N
2381   * ``BS_Allman`` (in configuration: ``Allman``)
2382     Always break before braces.
2384     .. code-block:: c++
2386       namespace N
2387       {
2388       enum E
2389       {
2390         E1,
2391         E2,
2392       };
2394       class C
2395       {
2396       public:
2397         C();
2398       };
2400       bool baz(int i)
2401       {
2402         try
2403         {
2404           do
2405           {
2406             switch (i)
2407             {
2408             case 1:
2409             {
2410               foobar();
2411               break;
2412             }
2413             default:
2414             {
2415               break;
2416             }
2417             }
2418           } while (--i);
2419           return true;
2420         }
2421         catch (...)
2422         {
2423           handleError();
2424           return false;
2425         }
2426       }
2428       void foo(bool b)
2429       {
2430         if (b)
2431         {
2432           baz(2);
2433         }
2434         else
2435         {
2436           baz(5);
2437         }
2438       }
2440       void bar() { foo(true); }
2441       } // namespace N
2443   * ``BS_Whitesmiths`` (in configuration: ``Whitesmiths``)
2444     Like ``Allman`` but always indent braces and line up code with braces.
2446     .. code-block:: c++
2448       namespace N
2449         {
2450       enum E
2451         {
2452         E1,
2453         E2,
2454         };
2456       class C
2457         {
2458       public:
2459         C();
2460         };
2462       bool baz(int i)
2463         {
2464         try
2465           {
2466           do
2467             {
2468             switch (i)
2469               {
2470               case 1:
2471               {
2472               foobar();
2473               break;
2474               }
2475               default:
2476               {
2477               break;
2478               }
2479               }
2480             } while (--i);
2481           return true;
2482           }
2483         catch (...)
2484           {
2485           handleError();
2486           return false;
2487           }
2488         }
2490       void foo(bool b)
2491         {
2492         if (b)
2493           {
2494           baz(2);
2495           }
2496         else
2497           {
2498           baz(5);
2499           }
2500         }
2502       void bar() { foo(true); }
2503         } // namespace N
2505   * ``BS_GNU`` (in configuration: ``GNU``)
2506     Always break before braces and add an extra level of indentation to
2507     braces of control statements, not to those of class, function
2508     or other definitions.
2510     .. code-block:: c++
2512       namespace N
2513       {
2514       enum E
2515       {
2516         E1,
2517         E2,
2518       };
2520       class C
2521       {
2522       public:
2523         C();
2524       };
2526       bool baz(int i)
2527       {
2528         try
2529           {
2530             do
2531               {
2532                 switch (i)
2533                   {
2534                   case 1:
2535                     {
2536                       foobar();
2537                       break;
2538                     }
2539                   default:
2540                     {
2541                       break;
2542                     }
2543                   }
2544               }
2545             while (--i);
2546             return true;
2547           }
2548         catch (...)
2549           {
2550             handleError();
2551             return false;
2552           }
2553       }
2555       void foo(bool b)
2556       {
2557         if (b)
2558           {
2559             baz(2);
2560           }
2561         else
2562           {
2563             baz(5);
2564           }
2565       }
2567       void bar() { foo(true); }
2568       } // namespace N
2570   * ``BS_WebKit`` (in configuration: ``WebKit``)
2571     Like ``Attach``, but break before functions.
2573     .. code-block:: c++
2575       namespace N {
2576       enum E {
2577         E1,
2578         E2,
2579       };
2581       class C {
2582       public:
2583         C();
2584       };
2586       bool baz(int i)
2587       {
2588         try {
2589           do {
2590             switch (i) {
2591             case 1: {
2592               foobar();
2593               break;
2594             }
2595             default: {
2596               break;
2597             }
2598             }
2599           } while (--i);
2600           return true;
2601         } catch (...) {
2602           handleError();
2603           return false;
2604         }
2605       }
2607       void foo(bool b)
2608       {
2609         if (b) {
2610           baz(2);
2611         } else {
2612           baz(5);
2613         }
2614       }
2616       void bar() { foo(true); }
2617       } // namespace N
2619   * ``BS_Custom`` (in configuration: ``Custom``)
2620     Configure each individual brace in ``BraceWrapping``.
2624 .. _BreakBeforeConceptDeclarations:
2626 **BreakBeforeConceptDeclarations** (``BreakBeforeConceptDeclarationsStyle``) :versionbadge:`clang-format 12` :ref:`¶ <BreakBeforeConceptDeclarations>`
2627   The concept declaration style to use.
2629   Possible values:
2631   * ``BBCDS_Never`` (in configuration: ``Never``)
2632     Keep the template declaration line together with ``concept``.
2634     .. code-block:: c++
2636       template <typename T> concept C = ...;
2638   * ``BBCDS_Allowed`` (in configuration: ``Allowed``)
2639     Breaking between template declaration and ``concept`` is allowed. The
2640     actual behavior depends on the content and line breaking rules and
2641     penalties.
2643   * ``BBCDS_Always`` (in configuration: ``Always``)
2644     Always break before ``concept``, putting it in the line after the
2645     template declaration.
2647     .. code-block:: c++
2649       template <typename T>
2650       concept C = ...;
2654 .. _BreakBeforeInlineASMColon:
2656 **BreakBeforeInlineASMColon** (``BreakBeforeInlineASMColonStyle``) :versionbadge:`clang-format 16` :ref:`¶ <BreakBeforeInlineASMColon>`
2657   The inline ASM colon style to use.
2659   Possible values:
2661   * ``BBIAS_Never`` (in configuration: ``Never``)
2662     No break before inline ASM colon.
2664     .. code-block:: c++
2666        asm volatile("string", : : val);
2668   * ``BBIAS_OnlyMultiline`` (in configuration: ``OnlyMultiline``)
2669     Break before inline ASM colon if the line length is longer than column
2670     limit.
2672     .. code-block:: c++
2674        asm volatile("string", : : val);
2675        asm("cmoveq %1, %2, %[result]"
2676            : [result] "=r"(result)
2677            : "r"(test), "r"(new), "[result]"(old));
2679   * ``BBIAS_Always`` (in configuration: ``Always``)
2680     Always break before inline ASM colon.
2682     .. code-block:: c++
2684        asm volatile("string",
2685                     :
2686                     : val);
2690 .. _BreakBeforeTernaryOperators:
2692 **BreakBeforeTernaryOperators** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <BreakBeforeTernaryOperators>`
2693   If ``true``, ternary operators will be placed after line breaks.
2695   .. code-block:: c++
2697      true:
2698      veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
2699          ? firstValue
2700          : SecondValueVeryVeryVeryVeryLong;
2702      false:
2703      veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
2704          firstValue :
2705          SecondValueVeryVeryVeryVeryLong;
2707 .. _BreakConstructorInitializers:
2709 **BreakConstructorInitializers** (``BreakConstructorInitializersStyle``) :versionbadge:`clang-format 5` :ref:`¶ <BreakConstructorInitializers>`
2710   The break constructor initializers style to use.
2712   Possible values:
2714   * ``BCIS_BeforeColon`` (in configuration: ``BeforeColon``)
2715     Break constructor initializers before the colon and after the commas.
2717     .. code-block:: c++
2719        Constructor()
2720            : initializer1(),
2721              initializer2()
2723   * ``BCIS_BeforeComma`` (in configuration: ``BeforeComma``)
2724     Break constructor initializers before the colon and commas, and align
2725     the commas with the colon.
2727     .. code-block:: c++
2729        Constructor()
2730            : initializer1()
2731            , initializer2()
2733   * ``BCIS_AfterColon`` (in configuration: ``AfterColon``)
2734     Break constructor initializers after the colon and commas.
2736     .. code-block:: c++
2738        Constructor() :
2739            initializer1(),
2740            initializer2()
2744 .. _BreakInheritanceList:
2746 **BreakInheritanceList** (``BreakInheritanceListStyle``) :versionbadge:`clang-format 7` :ref:`¶ <BreakInheritanceList>`
2747   The inheritance list style to use.
2749   Possible values:
2751   * ``BILS_BeforeColon`` (in configuration: ``BeforeColon``)
2752     Break inheritance list before the colon and after the commas.
2754     .. code-block:: c++
2756        class Foo
2757            : Base1,
2758              Base2
2759        {};
2761   * ``BILS_BeforeComma`` (in configuration: ``BeforeComma``)
2762     Break inheritance list before the colon and commas, and align
2763     the commas with the colon.
2765     .. code-block:: c++
2767        class Foo
2768            : Base1
2769            , Base2
2770        {};
2772   * ``BILS_AfterColon`` (in configuration: ``AfterColon``)
2773     Break inheritance list after the colon and commas.
2775     .. code-block:: c++
2777        class Foo :
2778            Base1,
2779            Base2
2780        {};
2782   * ``BILS_AfterComma`` (in configuration: ``AfterComma``)
2783     Break inheritance list only after the commas.
2785     .. code-block:: c++
2787        class Foo : Base1,
2788                    Base2
2789        {};
2793 .. _BreakStringLiterals:
2795 **BreakStringLiterals** (``Boolean``) :versionbadge:`clang-format 3.9` :ref:`¶ <BreakStringLiterals>`
2796   Allow breaking string literals when formatting.
2798   In C, C++, and Objective-C:
2800   .. code-block:: c++
2802      true:
2803      const char* x = "veryVeryVeryVeryVeryVe"
2804                      "ryVeryVeryVeryVeryVery"
2805                      "VeryLongString";
2807      false:
2808      const char* x =
2809          "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
2811   In C# and Java:
2813   .. code-block:: c++
2815      true:
2816      string x = "veryVeryVeryVeryVeryVe" +
2817                 "ryVeryVeryVeryVeryVery" +
2818                 "VeryLongString";
2820      false:
2821      string x =
2822          "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
2824   C# interpolated strings are not broken.
2826   In Verilog:
2828   .. code-block:: c++
2830      true:
2831      string x = {"veryVeryVeryVeryVeryVe",
2832                  "ryVeryVeryVeryVeryVery",
2833                  "VeryLongString"};
2835      false:
2836      string x =
2837          "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
2839 .. _ColumnLimit:
2841 **ColumnLimit** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <ColumnLimit>`
2842   The column limit.
2844   A column limit of ``0`` means that there is no column limit. In this case,
2845   clang-format will respect the input's line breaking decisions within
2846   statements unless they contradict other rules.
2848 .. _CommentPragmas:
2850 **CommentPragmas** (``String``) :versionbadge:`clang-format 3.7` :ref:`¶ <CommentPragmas>`
2851   A regular expression that describes comments with special meaning,
2852   which should not be split into lines or otherwise changed.
2854   .. code-block:: c++
2856      // CommentPragmas: '^ FOOBAR pragma:'
2857      // Will leave the following line unaffected
2858      #include <vector> // FOOBAR pragma: keep
2860 .. _CompactNamespaces:
2862 **CompactNamespaces** (``Boolean``) :versionbadge:`clang-format 5` :ref:`¶ <CompactNamespaces>`
2863   If ``true``, consecutive namespace declarations will be on the same
2864   line. If ``false``, each namespace is declared on a new line.
2866   .. code-block:: c++
2868     true:
2869     namespace Foo { namespace Bar {
2870     }}
2872     false:
2873     namespace Foo {
2874     namespace Bar {
2875     }
2876     }
2878   If it does not fit on a single line, the overflowing namespaces get
2879   wrapped:
2881   .. code-block:: c++
2883     namespace Foo { namespace Bar {
2884     namespace Extra {
2885     }}}
2887 .. _ConstructorInitializerAllOnOneLineOrOnePerLine:
2889 **ConstructorInitializerAllOnOneLineOrOnePerLine** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <ConstructorInitializerAllOnOneLineOrOnePerLine>`
2890   This option is **deprecated**. See ``CurrentLine`` of
2891   ``PackConstructorInitializers``.
2893 .. _ConstructorInitializerIndentWidth:
2895 **ConstructorInitializerIndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <ConstructorInitializerIndentWidth>`
2896   The number of characters to use for indentation of constructor
2897   initializer lists as well as inheritance lists.
2899 .. _ContinuationIndentWidth:
2901 **ContinuationIndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <ContinuationIndentWidth>`
2902   Indent width for line continuations.
2904   .. code-block:: c++
2906      ContinuationIndentWidth: 2
2908      int i =         //  VeryVeryVeryVeryVeryLongComment
2909        longFunction( // Again a long comment
2910          arg);
2912 .. _Cpp11BracedListStyle:
2914 **Cpp11BracedListStyle** (``Boolean``) :versionbadge:`clang-format 3.4` :ref:`¶ <Cpp11BracedListStyle>`
2915   If ``true``, format braced lists as best suited for C++11 braced
2916   lists.
2918   Important differences:
2919   - No spaces inside the braced list.
2920   - No line break before the closing brace.
2921   - Indentation with the continuation indent, not with the block indent.
2923   Fundamentally, C++11 braced lists are formatted exactly like function
2924   calls would be formatted in their place. If the braced list follows a name
2925   (e.g. a type or variable name), clang-format formats as if the ``{}`` were
2926   the parentheses of a function call with that name. If there is no name,
2927   a zero-length name is assumed.
2929   .. code-block:: c++
2931      true:                                  false:
2932      vector<int> x{1, 2, 3, 4};     vs.     vector<int> x{ 1, 2, 3, 4 };
2933      vector<T> x{{}, {}, {}, {}};           vector<T> x{ {}, {}, {}, {} };
2934      f(MyMap[{composite, key}]);            f(MyMap[{ composite, key }]);
2935      new int[3]{1, 2, 3};                   new int[3]{ 1, 2, 3 };
2937 .. _DeriveLineEnding:
2939 **DeriveLineEnding** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <DeriveLineEnding>`
2940   This option is **deprecated**. See ``DeriveLF`` and ``DeriveCRLF`` of
2941   ``LineEnding``.
2943 .. _DerivePointerAlignment:
2945 **DerivePointerAlignment** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <DerivePointerAlignment>`
2946   If ``true``, analyze the formatted file for the most common
2947   alignment of ``&`` and ``*``.
2948   Pointer and reference alignment styles are going to be updated according
2949   to the preferences found in the file.
2950   ``PointerAlignment`` is then used only as fallback.
2952 .. _DisableFormat:
2954 **DisableFormat** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <DisableFormat>`
2955   Disables formatting completely.
2957 .. _EmptyLineAfterAccessModifier:
2959 **EmptyLineAfterAccessModifier** (``EmptyLineAfterAccessModifierStyle``) :versionbadge:`clang-format 13` :ref:`¶ <EmptyLineAfterAccessModifier>`
2960   Defines when to put an empty line after access modifiers.
2961   ``EmptyLineBeforeAccessModifier`` configuration handles the number of
2962   empty lines between two access modifiers.
2964   Possible values:
2966   * ``ELAAMS_Never`` (in configuration: ``Never``)
2967     Remove all empty lines after access modifiers.
2969     .. code-block:: c++
2971       struct foo {
2972       private:
2973         int i;
2974       protected:
2975         int j;
2976         /* comment */
2977       public:
2978         foo() {}
2979       private:
2980       protected:
2981       };
2983   * ``ELAAMS_Leave`` (in configuration: ``Leave``)
2984     Keep existing empty lines after access modifiers.
2985     MaxEmptyLinesToKeep is applied instead.
2987   * ``ELAAMS_Always`` (in configuration: ``Always``)
2988     Always add empty line after access modifiers if there are none.
2989     MaxEmptyLinesToKeep is applied also.
2991     .. code-block:: c++
2993       struct foo {
2994       private:
2996         int i;
2997       protected:
2999         int j;
3000         /* comment */
3001       public:
3003         foo() {}
3004       private:
3006       protected:
3008       };
3012 .. _EmptyLineBeforeAccessModifier:
3014 **EmptyLineBeforeAccessModifier** (``EmptyLineBeforeAccessModifierStyle``) :versionbadge:`clang-format 12` :ref:`¶ <EmptyLineBeforeAccessModifier>`
3015   Defines in which cases to put empty line before access modifiers.
3017   Possible values:
3019   * ``ELBAMS_Never`` (in configuration: ``Never``)
3020     Remove all empty lines before access modifiers.
3022     .. code-block:: c++
3024       struct foo {
3025       private:
3026         int i;
3027       protected:
3028         int j;
3029         /* comment */
3030       public:
3031         foo() {}
3032       private:
3033       protected:
3034       };
3036   * ``ELBAMS_Leave`` (in configuration: ``Leave``)
3037     Keep existing empty lines before access modifiers.
3039   * ``ELBAMS_LogicalBlock`` (in configuration: ``LogicalBlock``)
3040     Add empty line only when access modifier starts a new logical block.
3041     Logical block is a group of one or more member fields or functions.
3043     .. code-block:: c++
3045       struct foo {
3046       private:
3047         int i;
3049       protected:
3050         int j;
3051         /* comment */
3052       public:
3053         foo() {}
3055       private:
3056       protected:
3057       };
3059   * ``ELBAMS_Always`` (in configuration: ``Always``)
3060     Always add empty line before access modifiers unless access modifier
3061     is at the start of struct or class definition.
3063     .. code-block:: c++
3065       struct foo {
3066       private:
3067         int i;
3069       protected:
3070         int j;
3071         /* comment */
3073       public:
3074         foo() {}
3076       private:
3078       protected:
3079       };
3083 .. _ExperimentalAutoDetectBinPacking:
3085 **ExperimentalAutoDetectBinPacking** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <ExperimentalAutoDetectBinPacking>`
3086   If ``true``, clang-format detects whether function calls and
3087   definitions are formatted with one parameter per line.
3089   Each call can be bin-packed, one-per-line or inconclusive. If it is
3090   inconclusive, e.g. completely on one line, but a decision needs to be
3091   made, clang-format analyzes whether there are other bin-packed cases in
3092   the input file and act accordingly.
3095   .. note::
3097    This is an experimental flag, that might go away or be renamed. Do
3098    not use this in config files, etc. Use at your own risk.
3100 .. _FixNamespaceComments:
3102 **FixNamespaceComments** (``Boolean``) :versionbadge:`clang-format 5` :ref:`¶ <FixNamespaceComments>`
3103   If ``true``, clang-format adds missing namespace end comments for
3104   namespaces and fixes invalid existing ones. This doesn't affect short
3105   namespaces, which are controlled by ``ShortNamespaceLines``.
3107   .. code-block:: c++
3109      true:                                  false:
3110      namespace longNamespace {      vs.     namespace longNamespace {
3111      void foo();                            void foo();
3112      void bar();                            void bar();
3113      } // namespace a                       }
3114      namespace shortNamespace {             namespace shortNamespace {
3115      void baz();                            void baz();
3116      }                                      }
3118 .. _ForEachMacros:
3120 **ForEachMacros** (``List of Strings``) :versionbadge:`clang-format 3.7` :ref:`¶ <ForEachMacros>`
3121   A vector of macros that should be interpreted as foreach loops
3122   instead of as function calls.
3124   These are expected to be macros of the form:
3126   .. code-block:: c++
3128     FOREACH(<variable-declaration>, ...)
3129       <loop-body>
3131   In the .clang-format configuration file, this can be configured like:
3133   .. code-block:: yaml
3135     ForEachMacros: ['RANGES_FOR', 'FOREACH']
3137   For example: BOOST_FOREACH.
3139 .. _IfMacros:
3141 **IfMacros** (``List of Strings``) :versionbadge:`clang-format 13` :ref:`¶ <IfMacros>`
3142   A vector of macros that should be interpreted as conditionals
3143   instead of as function calls.
3145   These are expected to be macros of the form:
3147   .. code-block:: c++
3149     IF(...)
3150       <conditional-body>
3151     else IF(...)
3152       <conditional-body>
3154   In the .clang-format configuration file, this can be configured like:
3156   .. code-block:: yaml
3158     IfMacros: ['IF']
3160   For example: `KJ_IF_MAYBE
3161   <https://github.com/capnproto/capnproto/blob/master/kjdoc/tour.md#maybes>`_
3163 .. _IncludeBlocks:
3165 **IncludeBlocks** (``IncludeBlocksStyle``) :versionbadge:`clang-format 6` :ref:`¶ <IncludeBlocks>`
3166   Dependent on the value, multiple ``#include`` blocks can be sorted
3167   as one and divided based on category.
3169   Possible values:
3171   * ``IBS_Preserve`` (in configuration: ``Preserve``)
3172     Sort each ``#include`` block separately.
3174     .. code-block:: c++
3176        #include "b.h"               into      #include "b.h"
3178        #include <lib/main.h>                  #include "a.h"
3179        #include "a.h"                         #include <lib/main.h>
3181   * ``IBS_Merge`` (in configuration: ``Merge``)
3182     Merge multiple ``#include`` blocks together and sort as one.
3184     .. code-block:: c++
3186        #include "b.h"               into      #include "a.h"
3187                                               #include "b.h"
3188        #include <lib/main.h>                  #include <lib/main.h>
3189        #include "a.h"
3191   * ``IBS_Regroup`` (in configuration: ``Regroup``)
3192     Merge multiple ``#include`` blocks together and sort as one.
3193     Then split into groups based on category priority. See
3194     ``IncludeCategories``.
3196     .. code-block:: c++
3198        #include "b.h"               into      #include "a.h"
3199                                               #include "b.h"
3200        #include <lib/main.h>
3201        #include "a.h"                         #include <lib/main.h>
3205 .. _IncludeCategories:
3207 **IncludeCategories** (``List of IncludeCategories``) :versionbadge:`clang-format 3.8` :ref:`¶ <IncludeCategories>`
3208   Regular expressions denoting the different ``#include`` categories
3209   used for ordering ``#includes``.
3211   `POSIX extended
3212   <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
3213   regular expressions are supported.
3215   These regular expressions are matched against the filename of an include
3216   (including the <> or "") in order. The value belonging to the first
3217   matching regular expression is assigned and ``#includes`` are sorted first
3218   according to increasing category number and then alphabetically within
3219   each category.
3221   If none of the regular expressions match, INT_MAX is assigned as
3222   category. The main header for a source file automatically gets category 0.
3223   so that it is generally kept at the beginning of the ``#includes``
3224   (https://llvm.org/docs/CodingStandards.html#include-style). However, you
3225   can also assign negative priorities if you have certain headers that
3226   always need to be first.
3228   There is a third and optional field ``SortPriority`` which can used while
3229   ``IncludeBlocks = IBS_Regroup`` to define the priority in which
3230   ``#includes`` should be ordered. The value of ``Priority`` defines the
3231   order of ``#include blocks`` and also allows the grouping of ``#includes``
3232   of different priority. ``SortPriority`` is set to the value of
3233   ``Priority`` as default if it is not assigned.
3235   Each regular expression can be marked as case sensitive with the field
3236   ``CaseSensitive``, per default it is not.
3238   To configure this in the .clang-format file, use:
3240   .. code-block:: yaml
3242     IncludeCategories:
3243       - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
3244         Priority:        2
3245         SortPriority:    2
3246         CaseSensitive:   true
3247       - Regex:           '^((<|")(gtest|gmock|isl|json)/)'
3248         Priority:        3
3249       - Regex:           '<[[:alnum:].]+>'
3250         Priority:        4
3251       - Regex:           '.*'
3252         Priority:        1
3253         SortPriority:    0
3255 .. _IncludeIsMainRegex:
3257 **IncludeIsMainRegex** (``String``) :versionbadge:`clang-format 3.9` :ref:`¶ <IncludeIsMainRegex>`
3258   Specify a regular expression of suffixes that are allowed in the
3259   file-to-main-include mapping.
3261   When guessing whether a #include is the "main" include (to assign
3262   category 0, see above), use this regex of allowed suffixes to the header
3263   stem. A partial match is done, so that:
3264   - "" means "arbitrary suffix"
3265   - "$" means "no suffix"
3267   For example, if configured to "(_test)?$", then a header a.h would be seen
3268   as the "main" include in both a.cc and a_test.cc.
3270 .. _IncludeIsMainSourceRegex:
3272 **IncludeIsMainSourceRegex** (``String``) :versionbadge:`clang-format 10` :ref:`¶ <IncludeIsMainSourceRegex>`
3273   Specify a regular expression for files being formatted
3274   that are allowed to be considered "main" in the
3275   file-to-main-include mapping.
3277   By default, clang-format considers files as "main" only when they end
3278   with: ``.c``, ``.cc``, ``.cpp``, ``.c++``, ``.cxx``, ``.m`` or ``.mm``
3279   extensions.
3280   For these files a guessing of "main" include takes place
3281   (to assign category 0, see above). This config option allows for
3282   additional suffixes and extensions for files to be considered as "main".
3284   For example, if this option is configured to ``(Impl\.hpp)$``,
3285   then a file ``ClassImpl.hpp`` is considered "main" (in addition to
3286   ``Class.c``, ``Class.cc``, ``Class.cpp`` and so on) and "main
3287   include file" logic will be executed (with *IncludeIsMainRegex* setting
3288   also being respected in later phase). Without this option set,
3289   ``ClassImpl.hpp`` would not have the main include file put on top
3290   before any other include.
3292 .. _IndentAccessModifiers:
3294 **IndentAccessModifiers** (``Boolean``) :versionbadge:`clang-format 13` :ref:`¶ <IndentAccessModifiers>`
3295   Specify whether access modifiers should have their own indentation level.
3297   When ``false``, access modifiers are indented (or outdented) relative to
3298   the record members, respecting the ``AccessModifierOffset``. Record
3299   members are indented one level below the record.
3300   When ``true``, access modifiers get their own indentation level. As a
3301   consequence, record members are always indented 2 levels below the record,
3302   regardless of the access modifier presence. Value of the
3303   ``AccessModifierOffset`` is ignored.
3305   .. code-block:: c++
3307      false:                                 true:
3308      class C {                      vs.     class C {
3309        class D {                                class D {
3310          void bar();                                void bar();
3311        protected:                                 protected:
3312          D();                                       D();
3313        };                                       };
3314      public:                                  public:
3315        C();                                     C();
3316      };                                     };
3317      void foo() {                           void foo() {
3318        return 1;                              return 1;
3319      }                                      }
3321 .. _IndentCaseBlocks:
3323 **IndentCaseBlocks** (``Boolean``) :versionbadge:`clang-format 11` :ref:`¶ <IndentCaseBlocks>`
3324   Indent case label blocks one level from the case label.
3326   When ``false``, the block following the case label uses the same
3327   indentation level as for the case label, treating the case label the same
3328   as an if-statement.
3329   When ``true``, the block gets indented as a scope block.
3331   .. code-block:: c++
3333      false:                                 true:
3334      switch (fool) {                vs.     switch (fool) {
3335      case 1: {                              case 1:
3336        bar();                                 {
3337      } break;                                   bar();
3338      default: {                               }
3339        plop();                                break;
3340      }                                      default:
3341      }                                        {
3342                                                 plop();
3343                                               }
3344                                             }
3346 .. _IndentCaseLabels:
3348 **IndentCaseLabels** (``Boolean``) :versionbadge:`clang-format 3.3` :ref:`¶ <IndentCaseLabels>`
3349   Indent case labels one level from the switch statement.
3351   When ``false``, use the same indentation level as for the switch
3352   statement. Switch statement body is always indented one level more than
3353   case labels (except the first block following the case label, which
3354   itself indents the code - unless IndentCaseBlocks is enabled).
3356   .. code-block:: c++
3358      false:                                 true:
3359      switch (fool) {                vs.     switch (fool) {
3360      case 1:                                  case 1:
3361        bar();                                   bar();
3362        break;                                   break;
3363      default:                                 default:
3364        plop();                                  plop();
3365      }                                      }
3367 .. _IndentExternBlock:
3369 **IndentExternBlock** (``IndentExternBlockStyle``) :versionbadge:`clang-format 11` :ref:`¶ <IndentExternBlock>`
3370   IndentExternBlockStyle is the type of indenting of extern blocks.
3372   Possible values:
3374   * ``IEBS_AfterExternBlock`` (in configuration: ``AfterExternBlock``)
3375     Backwards compatible with AfterExternBlock's indenting.
3377     .. code-block:: c++
3379        IndentExternBlock: AfterExternBlock
3380        BraceWrapping.AfterExternBlock: true
3381        extern "C"
3382        {
3383            void foo();
3384        }
3387     .. code-block:: c++
3389        IndentExternBlock: AfterExternBlock
3390        BraceWrapping.AfterExternBlock: false
3391        extern "C" {
3392        void foo();
3393        }
3395   * ``IEBS_NoIndent`` (in configuration: ``NoIndent``)
3396     Does not indent extern blocks.
3398     .. code-block:: c++
3400         extern "C" {
3401         void foo();
3402         }
3404   * ``IEBS_Indent`` (in configuration: ``Indent``)
3405     Indents extern blocks.
3407     .. code-block:: c++
3409         extern "C" {
3410           void foo();
3411         }
3415 .. _IndentGotoLabels:
3417 **IndentGotoLabels** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <IndentGotoLabels>`
3418   Indent goto labels.
3420   When ``false``, goto labels are flushed left.
3422   .. code-block:: c++
3424      true:                                  false:
3425      int f() {                      vs.     int f() {
3426        if (foo()) {                           if (foo()) {
3427        label1:                              label1:
3428          bar();                                 bar();
3429        }                                      }
3430      label2:                                label2:
3431        return 1;                              return 1;
3432      }                                      }
3434 .. _IndentPPDirectives:
3436 **IndentPPDirectives** (``PPDirectiveIndentStyle``) :versionbadge:`clang-format 6` :ref:`¶ <IndentPPDirectives>`
3437   The preprocessor directive indenting style to use.
3439   Possible values:
3441   * ``PPDIS_None`` (in configuration: ``None``)
3442     Does not indent any directives.
3444     .. code-block:: c++
3446        #if FOO
3447        #if BAR
3448        #include <foo>
3449        #endif
3450        #endif
3452   * ``PPDIS_AfterHash`` (in configuration: ``AfterHash``)
3453     Indents directives after the hash.
3455     .. code-block:: c++
3457        #if FOO
3458        #  if BAR
3459        #    include <foo>
3460        #  endif
3461        #endif
3463   * ``PPDIS_BeforeHash`` (in configuration: ``BeforeHash``)
3464     Indents directives before the hash.
3466     .. code-block:: c++
3468        #if FOO
3469          #if BAR
3470            #include <foo>
3471          #endif
3472        #endif
3476 .. _IndentRequiresClause:
3478 **IndentRequiresClause** (``Boolean``) :versionbadge:`clang-format 15` :ref:`¶ <IndentRequiresClause>`
3479   Indent the requires clause in a template. This only applies when
3480   ``RequiresClausePosition`` is ``OwnLine``, or ``WithFollowing``.
3482   In clang-format 12, 13 and 14 it was named ``IndentRequires``.
3484   .. code-block:: c++
3486      true:
3487      template <typename It>
3488        requires Iterator<It>
3489      void sort(It begin, It end) {
3490        //....
3491      }
3493      false:
3494      template <typename It>
3495      requires Iterator<It>
3496      void sort(It begin, It end) {
3497        //....
3498      }
3500 .. _IndentWidth:
3502 **IndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <IndentWidth>`
3503   The number of columns to use for indentation.
3505   .. code-block:: c++
3507      IndentWidth: 3
3509      void f() {
3510         someFunction();
3511         if (true, false) {
3512            f();
3513         }
3514      }
3516 .. _IndentWrappedFunctionNames:
3518 **IndentWrappedFunctionNames** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <IndentWrappedFunctionNames>`
3519   Indent if a function definition or declaration is wrapped after the
3520   type.
3522   .. code-block:: c++
3524      true:
3525      LoooooooooooooooooooooooooooooooooooooooongReturnType
3526          LoooooooooooooooooooooooooooooooongFunctionDeclaration();
3528      false:
3529      LoooooooooooooooooooooooooooooooooooooooongReturnType
3530      LoooooooooooooooooooooooooooooooongFunctionDeclaration();
3532 .. _InsertBraces:
3534 **InsertBraces** (``Boolean``) :versionbadge:`clang-format 15` :ref:`¶ <InsertBraces>`
3535   Insert braces after control statements (``if``, ``else``, ``for``, ``do``,
3536   and ``while``) in C++ unless the control statements are inside macro
3537   definitions or the braces would enclose preprocessor directives.
3539   .. warning::
3541    Setting this option to ``true`` could lead to incorrect code formatting
3542    due to clang-format's lack of complete semantic information. As such,
3543    extra care should be taken to review code changes made by this option.
3545   .. code-block:: c++
3547     false:                                    true:
3549     if (isa<FunctionDecl>(D))        vs.      if (isa<FunctionDecl>(D)) {
3550       handleFunctionDecl(D);                    handleFunctionDecl(D);
3551     else if (isa<VarDecl>(D))                 } else if (isa<VarDecl>(D)) {
3552       handleVarDecl(D);                         handleVarDecl(D);
3553     else                                      } else {
3554       return;                                   return;
3555                                               }
3557     while (i--)                      vs.      while (i--) {
3558       for (auto *A : D.attrs())                 for (auto *A : D.attrs()) {
3559         handleAttr(A);                            handleAttr(A);
3560                                                 }
3561                                               }
3563     do                               vs.      do {
3564       --i;                                      --i;
3565     while (i);                                } while (i);
3567 .. _InsertNewlineAtEOF:
3569 **InsertNewlineAtEOF** (``Boolean``) :versionbadge:`clang-format 16` :ref:`¶ <InsertNewlineAtEOF>`
3570   Insert a newline at end of file if missing.
3572 .. _InsertTrailingCommas:
3574 **InsertTrailingCommas** (``TrailingCommaStyle``) :versionbadge:`clang-format 11` :ref:`¶ <InsertTrailingCommas>`
3575   If set to ``TCS_Wrapped`` will insert trailing commas in container
3576   literals (arrays and objects) that wrap across multiple lines.
3577   It is currently only available for JavaScript
3578   and disabled by default ``TCS_None``.
3579   ``InsertTrailingCommas`` cannot be used together with ``BinPackArguments``
3580   as inserting the comma disables bin-packing.
3582   .. code-block:: c++
3584     TSC_Wrapped:
3585     const someArray = [
3586     aaaaaaaaaaaaaaaaaaaaaaaaaa,
3587     aaaaaaaaaaaaaaaaaaaaaaaaaa,
3588     aaaaaaaaaaaaaaaaaaaaaaaaaa,
3589     //                        ^ inserted
3590     ]
3592   Possible values:
3594   * ``TCS_None`` (in configuration: ``None``)
3595     Do not insert trailing commas.
3597   * ``TCS_Wrapped`` (in configuration: ``Wrapped``)
3598     Insert trailing commas in container literals that were wrapped over
3599     multiple lines. Note that this is conceptually incompatible with
3600     bin-packing, because the trailing comma is used as an indicator
3601     that a container should be formatted one-per-line (i.e. not bin-packed).
3602     So inserting a trailing comma counteracts bin-packing.
3606 .. _IntegerLiteralSeparator:
3608 **IntegerLiteralSeparator** (``IntegerLiteralSeparatorStyle``) :versionbadge:`clang-format 16` :ref:`¶ <IntegerLiteralSeparator>`
3609   Format integer literal separators (``'`` for C++ and ``_`` for C#, Java,
3610   and JavaScript).
3612   Nested configuration flags:
3614   Separator format of integer literals of different bases.
3616   If negative, remove separators. If  ``0``, leave the literal as is. If
3617   positive, insert separators between digits starting from the rightmost
3618   digit.
3620   For example, the config below will leave separators in binary literals
3621   alone, insert separators in decimal literals to separate the digits into
3622   groups of 3, and remove separators in hexadecimal literals.
3624   .. code-block:: c++
3626     IntegerLiteralSeparator:
3627       Binary: 0
3628       Decimal: 3
3629       Hex: -1
3631   You can also specify a minimum number of digits (``BinaryMinDigits``,
3632   ``DecimalMinDigits``, and ``HexMinDigits``) the integer literal must
3633   have in order for the separators to be inserted.
3635   * ``int8_t Binary`` Format separators in binary literals.
3637     .. code-block:: text
3639       /* -1: */ b = 0b100111101101;
3640       /*  0: */ b = 0b10011'11'0110'1;
3641       /*  3: */ b = 0b100'111'101'101;
3642       /*  4: */ b = 0b1001'1110'1101;
3644   * ``int8_t BinaryMinDigits`` Format separators in binary literals with a minimum number of digits.
3646     .. code-block:: text
3648       // Binary: 3
3649       // BinaryMinDigits: 7
3650       b1 = 0b101101;
3651       b2 = 0b1'101'101;
3653   * ``int8_t Decimal`` Format separators in decimal literals.
3655     .. code-block:: text
3657       /* -1: */ d = 18446744073709550592ull;
3658       /*  0: */ d = 184467'440737'0'95505'92ull;
3659       /*  3: */ d = 18'446'744'073'709'550'592ull;
3661   * ``int8_t DecimalMinDigits`` Format separators in decimal literals with a minimum number of digits.
3663     .. code-block:: text
3665       // Decimal: 3
3666       // DecimalMinDigits: 5
3667       d1 = 2023;
3668       d2 = 10'000;
3670   * ``int8_t Hex`` Format separators in hexadecimal literals.
3672     .. code-block:: text
3674       /* -1: */ h = 0xDEADBEEFDEADBEEFuz;
3675       /*  0: */ h = 0xDEAD'BEEF'DE'AD'BEE'Fuz;
3676       /*  2: */ h = 0xDE'AD'BE'EF'DE'AD'BE'EFuz;
3678   * ``int8_t HexMinDigits`` Format separators in hexadecimal literals with a minimum number of
3679     digits.
3681     .. code-block:: text
3683       // Hex: 2
3684       // HexMinDigits: 6
3685       h1 = 0xABCDE;
3686       h2 = 0xAB'CD'EF;
3689 .. _JavaImportGroups:
3691 **JavaImportGroups** (``List of Strings``) :versionbadge:`clang-format 8` :ref:`¶ <JavaImportGroups>`
3692   A vector of prefixes ordered by the desired groups for Java imports.
3694   One group's prefix can be a subset of another - the longest prefix is
3695   always matched. Within a group, the imports are ordered lexicographically.
3696   Static imports are grouped separately and follow the same group rules.
3697   By default, static imports are placed before non-static imports,
3698   but this behavior is changed by another option,
3699   ``SortJavaStaticImport``.
3701   In the .clang-format configuration file, this can be configured like
3702   in the following yaml example. This will result in imports being
3703   formatted as in the Java example below.
3705   .. code-block:: yaml
3707     JavaImportGroups: ['com.example', 'com', 'org']
3710   .. code-block:: java
3712      import static com.example.function1;
3714      import static com.test.function2;
3716      import static org.example.function3;
3718      import com.example.ClassA;
3719      import com.example.Test;
3720      import com.example.a.ClassB;
3722      import com.test.ClassC;
3724      import org.example.ClassD;
3726 .. _JavaScriptQuotes:
3728 **JavaScriptQuotes** (``JavaScriptQuoteStyle``) :versionbadge:`clang-format 3.9` :ref:`¶ <JavaScriptQuotes>`
3729   The JavaScriptQuoteStyle to use for JavaScript strings.
3731   Possible values:
3733   * ``JSQS_Leave`` (in configuration: ``Leave``)
3734     Leave string quotes as they are.
3736     .. code-block:: js
3738        string1 = "foo";
3739        string2 = 'bar';
3741   * ``JSQS_Single`` (in configuration: ``Single``)
3742     Always use single quotes.
3744     .. code-block:: js
3746        string1 = 'foo';
3747        string2 = 'bar';
3749   * ``JSQS_Double`` (in configuration: ``Double``)
3750     Always use double quotes.
3752     .. code-block:: js
3754        string1 = "foo";
3755        string2 = "bar";
3759 .. _JavaScriptWrapImports:
3761 **JavaScriptWrapImports** (``Boolean``) :versionbadge:`clang-format 3.9` :ref:`¶ <JavaScriptWrapImports>`
3762   Whether to wrap JavaScript import/export statements.
3764   .. code-block:: js
3766      true:
3767      import {
3768          VeryLongImportsAreAnnoying,
3769          VeryLongImportsAreAnnoying,
3770          VeryLongImportsAreAnnoying,
3771      } from 'some/module.js'
3773      false:
3774      import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
3776 .. _KeepEmptyLinesAtEOF:
3778 **KeepEmptyLinesAtEOF** (``Boolean``) :versionbadge:`clang-format 17` :ref:`¶ <KeepEmptyLinesAtEOF>`
3779   Keep empty lines (up to ``MaxEmptyLinesToKeep``) at end of file.
3781 .. _KeepEmptyLinesAtTheStartOfBlocks:
3783 **KeepEmptyLinesAtTheStartOfBlocks** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <KeepEmptyLinesAtTheStartOfBlocks>`
3784   If true, the empty line at the start of blocks is kept.
3786   .. code-block:: c++
3788      true:                                  false:
3789      if (foo) {                     vs.     if (foo) {
3790                                               bar();
3791        bar();                               }
3792      }
3794 .. _LambdaBodyIndentation:
3796 **LambdaBodyIndentation** (``LambdaBodyIndentationKind``) :versionbadge:`clang-format 13` :ref:`¶ <LambdaBodyIndentation>`
3797   The indentation style of lambda bodies. ``Signature`` (the default)
3798   causes the lambda body to be indented one additional level relative to
3799   the indentation level of the signature. ``OuterScope`` forces the lambda
3800   body to be indented one additional level relative to the parent scope
3801   containing the lambda signature.
3803   Possible values:
3805   * ``LBI_Signature`` (in configuration: ``Signature``)
3806     Align lambda body relative to the lambda signature. This is the default.
3808     .. code-block:: c++
3810        someMethod(
3811            [](SomeReallyLongLambdaSignatureArgument foo) {
3812              return;
3813            });
3815   * ``LBI_OuterScope`` (in configuration: ``OuterScope``)
3816     For statements within block scope, align lambda body relative to the
3817     indentation level of the outer scope the lambda signature resides in.
3819     .. code-block:: c++
3821        someMethod(
3822            [](SomeReallyLongLambdaSignatureArgument foo) {
3823          return;
3824        });
3826        someMethod(someOtherMethod(
3827            [](SomeReallyLongLambdaSignatureArgument foo) {
3828          return;
3829        }));
3833 .. _Language:
3835 **Language** (``LanguageKind``) :versionbadge:`clang-format 3.5` :ref:`¶ <Language>`
3836   Language, this format style is targeted at.
3838   Possible values:
3840   * ``LK_None`` (in configuration: ``None``)
3841     Do not use.
3843   * ``LK_Cpp`` (in configuration: ``Cpp``)
3844     Should be used for C, C++.
3846   * ``LK_CSharp`` (in configuration: ``CSharp``)
3847     Should be used for C#.
3849   * ``LK_Java`` (in configuration: ``Java``)
3850     Should be used for Java.
3852   * ``LK_JavaScript`` (in configuration: ``JavaScript``)
3853     Should be used for JavaScript.
3855   * ``LK_Json`` (in configuration: ``Json``)
3856     Should be used for JSON.
3858   * ``LK_ObjC`` (in configuration: ``ObjC``)
3859     Should be used for Objective-C, Objective-C++.
3861   * ``LK_Proto`` (in configuration: ``Proto``)
3862     Should be used for Protocol Buffers
3863     (https://developers.google.com/protocol-buffers/).
3865   * ``LK_TableGen`` (in configuration: ``TableGen``)
3866     Should be used for TableGen code.
3868   * ``LK_TextProto`` (in configuration: ``TextProto``)
3869     Should be used for Protocol Buffer messages in text format
3870     (https://developers.google.com/protocol-buffers/).
3872   * ``LK_Verilog`` (in configuration: ``Verilog``)
3873     Should be used for Verilog and SystemVerilog.
3874     https://standards.ieee.org/ieee/1800/6700/
3875     https://sci-hub.st/10.1109/IEEESTD.2018.8299595
3879 .. _LineEnding:
3881 **LineEnding** (``LineEndingStyle``) :versionbadge:`clang-format 16` :ref:`¶ <LineEnding>`
3882   Line ending style (``\n`` or ``\r\n``) to use.
3884   Possible values:
3886   * ``LE_LF`` (in configuration: ``LF``)
3887     Use ``\n``.
3889   * ``LE_CRLF`` (in configuration: ``CRLF``)
3890     Use ``\r\n``.
3892   * ``LE_DeriveLF`` (in configuration: ``DeriveLF``)
3893     Use ``\n`` unless the input has more lines ending in ``\r\n``.
3895   * ``LE_DeriveCRLF`` (in configuration: ``DeriveCRLF``)
3896     Use ``\r\n`` unless the input has more lines ending in ``\n``.
3900 .. _MacroBlockBegin:
3902 **MacroBlockBegin** (``String``) :versionbadge:`clang-format 3.7` :ref:`¶ <MacroBlockBegin>`
3903   A regular expression matching macros that start a block.
3905   .. code-block:: c++
3907      # With:
3908      MacroBlockBegin: "^NS_MAP_BEGIN|\
3909      NS_TABLE_HEAD$"
3910      MacroBlockEnd: "^\
3911      NS_MAP_END|\
3912      NS_TABLE_.*_END$"
3914      NS_MAP_BEGIN
3915        foo();
3916      NS_MAP_END
3918      NS_TABLE_HEAD
3919        bar();
3920      NS_TABLE_FOO_END
3922      # Without:
3923      NS_MAP_BEGIN
3924      foo();
3925      NS_MAP_END
3927      NS_TABLE_HEAD
3928      bar();
3929      NS_TABLE_FOO_END
3931 .. _MacroBlockEnd:
3933 **MacroBlockEnd** (``String``) :versionbadge:`clang-format 3.7` :ref:`¶ <MacroBlockEnd>`
3934   A regular expression matching macros that end a block.
3936 .. _Macros:
3938 **Macros** (``List of Strings``) :versionbadge:`clang-format 17` :ref:`¶ <Macros>`
3939   A list of macros of the form ``<definition>=<expansion>`` .
3941   Code will be parsed with macros expanded, in order to determine how to
3942   interpret and format the macro arguments.
3944   For example, the code:
3946   .. code-block:: c++
3948     A(a*b);
3950   will usually be interpreted as a call to a function A, and the
3951   multiplication expression will be formatted as ``a * b``.
3953   If we specify the macro definition:
3955   .. code-block:: yaml
3957     Macros:
3958     - A(x)=x
3960   the code will now be parsed as a declaration of the variable b of type a*,
3961   and formatted as ``a* b`` (depending on pointer-binding rules).
3963   Features and restrictions:
3964    * Both function-like macros and object-like macros are supported.
3965    * Macro arguments must be used exactly once in the expansion.
3966    * No recursive expansion; macros referencing other macros will be
3967      ignored.
3968    * Overloading by arity is supported: for example, given the macro
3969      definitions A=x, A()=y, A(a)=a
3972   .. code-block:: c++
3974      A; -> x;
3975      A(); -> y;
3976      A(z); -> z;
3977      A(a, b); // will not be expanded.
3979 .. _MaxEmptyLinesToKeep:
3981 **MaxEmptyLinesToKeep** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <MaxEmptyLinesToKeep>`
3982   The maximum number of consecutive empty lines to keep.
3984   .. code-block:: c++
3986      MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
3987      int f() {                              int f() {
3988        int = 1;                                 int i = 1;
3989                                                 i = foo();
3990        i = foo();                               return i;
3991                                             }
3992        return i;
3993      }
3995 .. _NamespaceIndentation:
3997 **NamespaceIndentation** (``NamespaceIndentationKind``) :versionbadge:`clang-format 3.7` :ref:`¶ <NamespaceIndentation>`
3998   The indentation used for namespaces.
4000   Possible values:
4002   * ``NI_None`` (in configuration: ``None``)
4003     Don't indent in namespaces.
4005     .. code-block:: c++
4007        namespace out {
4008        int i;
4009        namespace in {
4010        int i;
4011        }
4012        }
4014   * ``NI_Inner`` (in configuration: ``Inner``)
4015     Indent only in inner namespaces (nested in other namespaces).
4017     .. code-block:: c++
4019        namespace out {
4020        int i;
4021        namespace in {
4022          int i;
4023        }
4024        }
4026   * ``NI_All`` (in configuration: ``All``)
4027     Indent in all namespaces.
4029     .. code-block:: c++
4031        namespace out {
4032          int i;
4033          namespace in {
4034            int i;
4035          }
4036        }
4040 .. _NamespaceMacros:
4042 **NamespaceMacros** (``List of Strings``) :versionbadge:`clang-format 9` :ref:`¶ <NamespaceMacros>`
4043   A vector of macros which are used to open namespace blocks.
4045   These are expected to be macros of the form:
4047   .. code-block:: c++
4049     NAMESPACE(<namespace-name>, ...) {
4050       <namespace-content>
4051     }
4053   For example: TESTSUITE
4055 .. _ObjCBinPackProtocolList:
4057 **ObjCBinPackProtocolList** (``BinPackStyle``) :versionbadge:`clang-format 7` :ref:`¶ <ObjCBinPackProtocolList>`
4058   Controls bin-packing Objective-C protocol conformance list
4059   items into as few lines as possible when they go over ``ColumnLimit``.
4061   If ``Auto`` (the default), delegates to the value in
4062   ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
4063   protocol conformance list items into as few lines as possible
4064   whenever they go over ``ColumnLimit``.
4066   If ``Always``, always bin-packs Objective-C protocol conformance
4067   list items into as few lines as possible whenever they go over
4068   ``ColumnLimit``.
4070   If ``Never``, lays out Objective-C protocol conformance list items
4071   onto individual lines whenever they go over ``ColumnLimit``.
4074   .. code-block:: objc
4076      Always (or Auto, if BinPackParameters=true):
4077      @interface ccccccccccccc () <
4078          ccccccccccccc, ccccccccccccc,
4079          ccccccccccccc, ccccccccccccc> {
4080      }
4082      Never (or Auto, if BinPackParameters=false):
4083      @interface ddddddddddddd () <
4084          ddddddddddddd,
4085          ddddddddddddd,
4086          ddddddddddddd,
4087          ddddddddddddd> {
4088      }
4090   Possible values:
4092   * ``BPS_Auto`` (in configuration: ``Auto``)
4093     Automatically determine parameter bin-packing behavior.
4095   * ``BPS_Always`` (in configuration: ``Always``)
4096     Always bin-pack parameters.
4098   * ``BPS_Never`` (in configuration: ``Never``)
4099     Never bin-pack parameters.
4103 .. _ObjCBlockIndentWidth:
4105 **ObjCBlockIndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <ObjCBlockIndentWidth>`
4106   The number of characters to use for indentation of ObjC blocks.
4108   .. code-block:: objc
4110      ObjCBlockIndentWidth: 4
4112      [operation setCompletionBlock:^{
4113          [self onOperationDone];
4114      }];
4116 .. _ObjCBreakBeforeNestedBlockParam:
4118 **ObjCBreakBeforeNestedBlockParam** (``Boolean``) :versionbadge:`clang-format 11` :ref:`¶ <ObjCBreakBeforeNestedBlockParam>`
4119   Break parameters list into lines when there is nested block
4120   parameters in a function call.
4122   .. code-block:: c++
4124     false:
4125      - (void)_aMethod
4126      {
4127          [self.test1 t:self w:self callback:^(typeof(self) self, NSNumber
4128          *u, NSNumber *v) {
4129              u = c;
4130          }]
4131      }
4132      true:
4133      - (void)_aMethod
4134      {
4135         [self.test1 t:self
4136                      w:self
4137             callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
4138                  u = c;
4139              }]
4140      }
4142 .. _ObjCSpaceAfterProperty:
4144 **ObjCSpaceAfterProperty** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <ObjCSpaceAfterProperty>`
4145   Add a space after ``@property`` in Objective-C, i.e. use
4146   ``@property (readonly)`` instead of ``@property(readonly)``.
4148 .. _ObjCSpaceBeforeProtocolList:
4150 **ObjCSpaceBeforeProtocolList** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <ObjCSpaceBeforeProtocolList>`
4151   Add a space in front of an Objective-C protocol list, i.e. use
4152   ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
4154 .. _PPIndentWidth:
4156 **PPIndentWidth** (``Integer``) :versionbadge:`clang-format 13` :ref:`¶ <PPIndentWidth>`
4157   The number of columns to use for indentation of preprocessor statements.
4158   When set to -1 (default) ``IndentWidth`` is used also for preprocessor
4159   statements.
4161   .. code-block:: c++
4163      PPIndentWidth: 1
4165      #ifdef __linux__
4166      # define FOO
4167      #else
4168      # define BAR
4169      #endif
4171 .. _PackConstructorInitializers:
4173 **PackConstructorInitializers** (``PackConstructorInitializersStyle``) :versionbadge:`clang-format 14` :ref:`¶ <PackConstructorInitializers>`
4174   The pack constructor initializers style to use.
4176   Possible values:
4178   * ``PCIS_Never`` (in configuration: ``Never``)
4179     Always put each constructor initializer on its own line.
4181     .. code-block:: c++
4183        Constructor()
4184            : a(),
4185              b()
4187   * ``PCIS_BinPack`` (in configuration: ``BinPack``)
4188     Bin-pack constructor initializers.
4190     .. code-block:: c++
4192        Constructor()
4193            : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(),
4194              cccccccccccccccccccc()
4196   * ``PCIS_CurrentLine`` (in configuration: ``CurrentLine``)
4197     Put all constructor initializers on the current line if they fit.
4198     Otherwise, put each one on its own line.
4200     .. code-block:: c++
4202        Constructor() : a(), b()
4204        Constructor()
4205            : aaaaaaaaaaaaaaaaaaaa(),
4206              bbbbbbbbbbbbbbbbbbbb(),
4207              ddddddddddddd()
4209   * ``PCIS_NextLine`` (in configuration: ``NextLine``)
4210     Same as ``PCIS_CurrentLine`` except that if all constructor initializers
4211     do not fit on the current line, try to fit them on the next line.
4213     .. code-block:: c++
4215        Constructor() : a(), b()
4217        Constructor()
4218            : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(), ddddddddddddd()
4220        Constructor()
4221            : aaaaaaaaaaaaaaaaaaaa(),
4222              bbbbbbbbbbbbbbbbbbbb(),
4223              cccccccccccccccccccc()
4225   * ``PCIS_NextLineOnly`` (in configuration: ``NextLineOnly``)
4226     Put all constructor initializers on the next line if they fit.
4227     Otherwise, put each one on its own line.
4229     .. code-block:: c++
4231        Constructor()
4232            : a(), b()
4234        Constructor()
4235            : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(), ddddddddddddd()
4237        Constructor()
4238            : aaaaaaaaaaaaaaaaaaaa(),
4239              bbbbbbbbbbbbbbbbbbbb(),
4240              cccccccccccccccccccc()
4244 .. _PenaltyBreakAssignment:
4246 **PenaltyBreakAssignment** (``Unsigned``) :versionbadge:`clang-format 5` :ref:`¶ <PenaltyBreakAssignment>`
4247   The penalty for breaking around an assignment operator.
4249 .. _PenaltyBreakBeforeFirstCallParameter:
4251 **PenaltyBreakBeforeFirstCallParameter** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <PenaltyBreakBeforeFirstCallParameter>`
4252   The penalty for breaking a function call after ``call(``.
4254 .. _PenaltyBreakComment:
4256 **PenaltyBreakComment** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <PenaltyBreakComment>`
4257   The penalty for each line break introduced inside a comment.
4259 .. _PenaltyBreakFirstLessLess:
4261 **PenaltyBreakFirstLessLess** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <PenaltyBreakFirstLessLess>`
4262   The penalty for breaking before the first ``<<``.
4264 .. _PenaltyBreakOpenParenthesis:
4266 **PenaltyBreakOpenParenthesis** (``Unsigned``) :versionbadge:`clang-format 14` :ref:`¶ <PenaltyBreakOpenParenthesis>`
4267   The penalty for breaking after ``(``.
4269 .. _PenaltyBreakString:
4271 **PenaltyBreakString** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <PenaltyBreakString>`
4272   The penalty for each line break introduced inside a string literal.
4274 .. _PenaltyBreakTemplateDeclaration:
4276 **PenaltyBreakTemplateDeclaration** (``Unsigned``) :versionbadge:`clang-format 7` :ref:`¶ <PenaltyBreakTemplateDeclaration>`
4277   The penalty for breaking after template declaration.
4279 .. _PenaltyExcessCharacter:
4281 **PenaltyExcessCharacter** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <PenaltyExcessCharacter>`
4282   The penalty for each character outside of the column limit.
4284 .. _PenaltyIndentedWhitespace:
4286 **PenaltyIndentedWhitespace** (``Unsigned``) :versionbadge:`clang-format 12` :ref:`¶ <PenaltyIndentedWhitespace>`
4287   Penalty for each character of whitespace indentation
4288   (counted relative to leading non-whitespace column).
4290 .. _PenaltyReturnTypeOnItsOwnLine:
4292 **PenaltyReturnTypeOnItsOwnLine** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <PenaltyReturnTypeOnItsOwnLine>`
4293   Penalty for putting the return type of a function onto its own line.
4295 .. _PointerAlignment:
4297 **PointerAlignment** (``PointerAlignmentStyle``) :versionbadge:`clang-format 3.7` :ref:`¶ <PointerAlignment>`
4298   Pointer and reference alignment style.
4300   Possible values:
4302   * ``PAS_Left`` (in configuration: ``Left``)
4303     Align pointer to the left.
4305     .. code-block:: c++
4307       int* a;
4309   * ``PAS_Right`` (in configuration: ``Right``)
4310     Align pointer to the right.
4312     .. code-block:: c++
4314       int *a;
4316   * ``PAS_Middle`` (in configuration: ``Middle``)
4317     Align pointer in the middle.
4319     .. code-block:: c++
4321       int * a;
4325 .. _QualifierAlignment:
4327 **QualifierAlignment** (``QualifierAlignmentStyle``) :versionbadge:`clang-format 14` :ref:`¶ <QualifierAlignment>`
4328   Different ways to arrange specifiers and qualifiers (e.g. const/volatile).
4330   .. warning::
4332    Setting ``QualifierAlignment``  to something other than ``Leave``, COULD
4333    lead to incorrect code formatting due to incorrect decisions made due to
4334    clang-formats lack of complete semantic information.
4335    As such extra care should be taken to review code changes made by the use
4336    of this option.
4338   Possible values:
4340   * ``QAS_Leave`` (in configuration: ``Leave``)
4341     Don't change specifiers/qualifiers to either Left or Right alignment
4342     (default).
4344     .. code-block:: c++
4346        int const a;
4347        const int *a;
4349   * ``QAS_Left`` (in configuration: ``Left``)
4350     Change specifiers/qualifiers to be left-aligned.
4352     .. code-block:: c++
4354        const int a;
4355        const int *a;
4357   * ``QAS_Right`` (in configuration: ``Right``)
4358     Change specifiers/qualifiers to be right-aligned.
4360     .. code-block:: c++
4362        int const a;
4363        int const *a;
4365   * ``QAS_Custom`` (in configuration: ``Custom``)
4366     Change specifiers/qualifiers to be aligned based on ``QualifierOrder``.
4367     With:
4369     .. code-block:: yaml
4371       QualifierOrder: ['inline', 'static', 'type', 'const']
4374     .. code-block:: c++
4377        int const a;
4378        int const *a;
4382 .. _QualifierOrder:
4384 **QualifierOrder** (``List of Strings``) :versionbadge:`clang-format 14` :ref:`¶ <QualifierOrder>`
4385   The order in which the qualifiers appear.
4386   Order is an array that can contain any of the following:
4388     * const
4389     * inline
4390     * static
4391     * friend
4392     * constexpr
4393     * volatile
4394     * restrict
4395     * type
4398   .. note::
4400    it MUST contain 'type'.
4402   Items to the left of 'type' will be placed to the left of the type and
4403   aligned in the order supplied. Items to the right of 'type' will be
4404   placed to the right of the type and aligned in the order supplied.
4407   .. code-block:: yaml
4409     QualifierOrder: ['inline', 'static', 'type', 'const', 'volatile' ]
4411 .. _RawStringFormats:
4413 **RawStringFormats** (``List of RawStringFormats``) :versionbadge:`clang-format 6` :ref:`¶ <RawStringFormats>`
4414   Defines hints for detecting supported languages code blocks in raw
4415   strings.
4417   A raw string with a matching delimiter or a matching enclosing function
4418   name will be reformatted assuming the specified language based on the
4419   style for that language defined in the .clang-format file. If no style has
4420   been defined in the .clang-format file for the specific language, a
4421   predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
4422   found, the formatting is based on llvm style. A matching delimiter takes
4423   precedence over a matching enclosing function name for determining the
4424   language of the raw string contents.
4426   If a canonical delimiter is specified, occurrences of other delimiters for
4427   the same language will be updated to the canonical if possible.
4429   There should be at most one specification per language and each delimiter
4430   and enclosing function should not occur in multiple specifications.
4432   To configure this in the .clang-format file, use:
4434   .. code-block:: yaml
4436     RawStringFormats:
4437       - Language: TextProto
4438           Delimiters:
4439             - 'pb'
4440             - 'proto'
4441           EnclosingFunctions:
4442             - 'PARSE_TEXT_PROTO'
4443           BasedOnStyle: google
4444       - Language: Cpp
4445           Delimiters:
4446             - 'cc'
4447             - 'cpp'
4448           BasedOnStyle: llvm
4449           CanonicalDelimiter: 'cc'
4451 .. _ReferenceAlignment:
4453 **ReferenceAlignment** (``ReferenceAlignmentStyle``) :versionbadge:`clang-format 13` :ref:`¶ <ReferenceAlignment>`
4454   Reference alignment style (overrides ``PointerAlignment`` for
4455   references).
4457   Possible values:
4459   * ``RAS_Pointer`` (in configuration: ``Pointer``)
4460     Align reference like ``PointerAlignment``.
4462   * ``RAS_Left`` (in configuration: ``Left``)
4463     Align reference to the left.
4465     .. code-block:: c++
4467       int& a;
4469   * ``RAS_Right`` (in configuration: ``Right``)
4470     Align reference to the right.
4472     .. code-block:: c++
4474       int &a;
4476   * ``RAS_Middle`` (in configuration: ``Middle``)
4477     Align reference in the middle.
4479     .. code-block:: c++
4481       int & a;
4485 .. _ReflowComments:
4487 **ReflowComments** (``Boolean``) :versionbadge:`clang-format 3.8` :ref:`¶ <ReflowComments>`
4488   If ``true``, clang-format will attempt to re-flow comments. That is it
4489   will touch a comment and *reflow* long comments into new lines, trying to
4490   obey the ``ColumnLimit``.
4492   .. code-block:: c++
4494      false:
4495      // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
4496      /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
4498      true:
4499      // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
4500      // information
4501      /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
4502       * information */
4504 .. _RemoveBracesLLVM:
4506 **RemoveBracesLLVM** (``Boolean``) :versionbadge:`clang-format 14` :ref:`¶ <RemoveBracesLLVM>`
4507   Remove optional braces of control statements (``if``, ``else``, ``for``,
4508   and ``while``) in C++ according to the LLVM coding style.
4510   .. warning::
4512    This option will be renamed and expanded to support other styles.
4514   .. warning::
4516    Setting this option to ``true`` could lead to incorrect code formatting
4517    due to clang-format's lack of complete semantic information. As such,
4518    extra care should be taken to review code changes made by this option.
4520   .. code-block:: c++
4522     false:                                     true:
4524     if (isa<FunctionDecl>(D)) {        vs.     if (isa<FunctionDecl>(D))
4525       handleFunctionDecl(D);                     handleFunctionDecl(D);
4526     } else if (isa<VarDecl>(D)) {              else if (isa<VarDecl>(D))
4527       handleVarDecl(D);                          handleVarDecl(D);
4528     }
4530     if (isa<VarDecl>(D)) {             vs.     if (isa<VarDecl>(D)) {
4531       for (auto *A : D.attrs()) {                for (auto *A : D.attrs())
4532         if (shouldProcessAttr(A)) {                if (shouldProcessAttr(A))
4533           handleAttr(A);                             handleAttr(A);
4534         }                                      }
4535       }
4536     }
4538     if (isa<FunctionDecl>(D)) {        vs.     if (isa<FunctionDecl>(D))
4539       for (auto *A : D.attrs()) {                for (auto *A : D.attrs())
4540         handleAttr(A);                             handleAttr(A);
4541       }
4542     }
4544     if (auto *D = (T)(D)) {            vs.     if (auto *D = (T)(D)) {
4545       if (shouldProcess(D)) {                    if (shouldProcess(D))
4546         handleVarDecl(D);                          handleVarDecl(D);
4547       } else {                                   else
4548         markAsIgnored(D);                          markAsIgnored(D);
4549       }                                        }
4550     }
4552     if (a) {                           vs.     if (a)
4553       b();                                       b();
4554     } else {                                   else if (c)
4555       if (c) {                                   d();
4556         d();                                   else
4557       } else {                                   e();
4558         e();
4559       }
4560     }
4562 .. _RemoveParentheses:
4564 **RemoveParentheses** (``RemoveParenthesesStyle``) :versionbadge:`clang-format 17` :ref:`¶ <RemoveParentheses>`
4565   Remove redundant parentheses.
4567   .. warning::
4569    Setting this option to any value other than ``Leave`` could lead to
4570    incorrect code formatting due to clang-format's lack of complete semantic
4571    information. As such, extra care should be taken to review code changes
4572    made by this option.
4574   Possible values:
4576   * ``RPS_Leave`` (in configuration: ``Leave``)
4577     Do not remove parentheses.
4579     .. code-block:: c++
4581       class __declspec((dllimport)) X {};
4582       co_return (((0)));
4583       return ((a + b) - ((c + d)));
4585   * ``RPS_MultipleParentheses`` (in configuration: ``MultipleParentheses``)
4586     Replace multiple parentheses with single parentheses.
4588     .. code-block:: c++
4590       class __declspec(dllimport) X {};
4591       co_return (0);
4592       return ((a + b) - (c + d));
4594   * ``RPS_ReturnStatement`` (in configuration: ``ReturnStatement``)
4595     Also remove parentheses enclosing the expression in a
4596     ``return``/``co_return`` statement.
4598     .. code-block:: c++
4600       class __declspec(dllimport) X {};
4601       co_return 0;
4602       return (a + b) - (c + d);
4606 .. _RemoveSemicolon:
4608 **RemoveSemicolon** (``Boolean``) :versionbadge:`clang-format 16` :ref:`¶ <RemoveSemicolon>`
4609   Remove semicolons after the closing brace of a non-empty function.
4611   .. warning::
4613    Setting this option to ``true`` could lead to incorrect code formatting
4614    due to clang-format's lack of complete semantic information. As such,
4615    extra care should be taken to review code changes made by this option.
4617   .. code-block:: c++
4619     false:                                     true:
4621     int max(int a, int b) {                    int max(int a, int b) {
4622       return a > b ? a : b;                      return a > b ? a : b;
4623     };                                         }
4625 .. _RequiresClausePosition:
4627 **RequiresClausePosition** (``RequiresClausePositionStyle``) :versionbadge:`clang-format 15` :ref:`¶ <RequiresClausePosition>`
4628   The position of the ``requires`` clause.
4630   Possible values:
4632   * ``RCPS_OwnLine`` (in configuration: ``OwnLine``)
4633     Always put the ``requires`` clause on its own line.
4635     .. code-block:: c++
4637       template <typename T>
4638       requires C<T>
4639       struct Foo {...
4641       template <typename T>
4642       requires C<T>
4643       void bar(T t) {...
4645       template <typename T>
4646       void baz(T t)
4647       requires C<T>
4648       {...
4650   * ``RCPS_WithPreceding`` (in configuration: ``WithPreceding``)
4651     Try to put the clause together with the preceding part of a declaration.
4652     For class templates: stick to the template declaration.
4653     For function templates: stick to the template declaration.
4654     For function declaration followed by a requires clause: stick to the
4655     parameter list.
4657     .. code-block:: c++
4659       template <typename T> requires C<T>
4660       struct Foo {...
4662       template <typename T> requires C<T>
4663       void bar(T t) {...
4665       template <typename T>
4666       void baz(T t) requires C<T>
4667       {...
4669   * ``RCPS_WithFollowing`` (in configuration: ``WithFollowing``)
4670     Try to put the ``requires`` clause together with the class or function
4671     declaration.
4673     .. code-block:: c++
4675       template <typename T>
4676       requires C<T> struct Foo {...
4678       template <typename T>
4679       requires C<T> void bar(T t) {...
4681       template <typename T>
4682       void baz(T t)
4683       requires C<T> {...
4685   * ``RCPS_SingleLine`` (in configuration: ``SingleLine``)
4686     Try to put everything in the same line if possible. Otherwise normal
4687     line breaking rules take over.
4689     .. code-block:: c++
4691       // Fitting:
4692       template <typename T> requires C<T> struct Foo {...
4694       template <typename T> requires C<T> void bar(T t) {...
4696       template <typename T> void bar(T t) requires C<T> {...
4698       // Not fitting, one possible example:
4699       template <typename LongName>
4700       requires C<LongName>
4701       struct Foo {...
4703       template <typename LongName>
4704       requires C<LongName>
4705       void bar(LongName ln) {
4707       template <typename LongName>
4708       void bar(LongName ln)
4709           requires C<LongName> {
4713 .. _RequiresExpressionIndentation:
4715 **RequiresExpressionIndentation** (``RequiresExpressionIndentationKind``) :versionbadge:`clang-format 16` :ref:`¶ <RequiresExpressionIndentation>`
4716   The indentation used for requires expression bodies.
4718   Possible values:
4720   * ``REI_OuterScope`` (in configuration: ``OuterScope``)
4721     Align requires expression body relative to the indentation level of the
4722     outer scope the requires expression resides in.
4723     This is the default.
4725     .. code-block:: c++
4727        template <typename T>
4728        concept C = requires(T t) {
4729          ...
4730        }
4732   * ``REI_Keyword`` (in configuration: ``Keyword``)
4733     Align requires expression body relative to the ``requires`` keyword.
4735     .. code-block:: c++
4737        template <typename T>
4738        concept C = requires(T t) {
4739                      ...
4740                    }
4744 .. _SeparateDefinitionBlocks:
4746 **SeparateDefinitionBlocks** (``SeparateDefinitionStyle``) :versionbadge:`clang-format 14` :ref:`¶ <SeparateDefinitionBlocks>`
4747   Specifies the use of empty lines to separate definition blocks, including
4748   classes, structs, enums, and functions.
4750   .. code-block:: c++
4752      Never                  v.s.     Always
4753      #include <cstring>              #include <cstring>
4754      struct Foo {
4755        int a, b, c;                  struct Foo {
4756      };                                int a, b, c;
4757      namespace Ns {                  };
4758      class Bar {
4759      public:                         namespace Ns {
4760        struct Foobar {               class Bar {
4761          int a;                      public:
4762          int b;                        struct Foobar {
4763        };                                int a;
4764      private:                            int b;
4765        int t;                          };
4766        int method1() {
4767          // ...                      private:
4768        }                               int t;
4769        enum List {
4770          ITEM1,                        int method1() {
4771          ITEM2                           // ...
4772        };                              }
4773        template<typename T>
4774        int method2(T x) {              enum List {
4775          // ...                          ITEM1,
4776        }                                 ITEM2
4777        int i, j, k;                    };
4778        int method3(int par) {
4779          // ...                        template<typename T>
4780        }                               int method2(T x) {
4781      };                                  // ...
4782      class C {};                       }
4783      }
4784                                        int i, j, k;
4786                                        int method3(int par) {
4787                                          // ...
4788                                        }
4789                                      };
4791                                      class C {};
4792                                      }
4794   Possible values:
4796   * ``SDS_Leave`` (in configuration: ``Leave``)
4797     Leave definition blocks as they are.
4799   * ``SDS_Always`` (in configuration: ``Always``)
4800     Insert an empty line between definition blocks.
4802   * ``SDS_Never`` (in configuration: ``Never``)
4803     Remove any empty line between definition blocks.
4807 .. _ShortNamespaceLines:
4809 **ShortNamespaceLines** (``Unsigned``) :versionbadge:`clang-format 13` :ref:`¶ <ShortNamespaceLines>`
4810   The maximal number of unwrapped lines that a short namespace spans.
4811   Defaults to 1.
4813   This determines the maximum length of short namespaces by counting
4814   unwrapped lines (i.e. containing neither opening nor closing
4815   namespace brace) and makes "FixNamespaceComments" omit adding
4816   end comments for those.
4818   .. code-block:: c++
4820      ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
4821      namespace a {                      namespace a {
4822        int foo;                           int foo;
4823      }                                  } // namespace a
4825      ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
4826      namespace b {                      namespace b {
4827        int foo;                           int foo;
4828        int bar;                           int bar;
4829      } // namespace b                   } // namespace b
4831 .. _SortIncludes:
4833 **SortIncludes** (``SortIncludesOptions``) :versionbadge:`clang-format 3.8` :ref:`¶ <SortIncludes>`
4834   Controls if and how clang-format will sort ``#includes``.
4836   Possible values:
4838   * ``SI_Never`` (in configuration: ``Never``)
4839     Includes are never sorted.
4841     .. code-block:: c++
4843        #include "B/A.h"
4844        #include "A/B.h"
4845        #include "a/b.h"
4846        #include "A/b.h"
4847        #include "B/a.h"
4849   * ``SI_CaseSensitive`` (in configuration: ``CaseSensitive``)
4850     Includes are sorted in an ASCIIbetical or case sensitive fashion.
4852     .. code-block:: c++
4854        #include "A/B.h"
4855        #include "A/b.h"
4856        #include "B/A.h"
4857        #include "B/a.h"
4858        #include "a/b.h"
4860   * ``SI_CaseInsensitive`` (in configuration: ``CaseInsensitive``)
4861     Includes are sorted in an alphabetical or case insensitive fashion.
4863     .. code-block:: c++
4865        #include "A/B.h"
4866        #include "A/b.h"
4867        #include "a/b.h"
4868        #include "B/A.h"
4869        #include "B/a.h"
4873 .. _SortJavaStaticImport:
4875 **SortJavaStaticImport** (``SortJavaStaticImportOptions``) :versionbadge:`clang-format 12` :ref:`¶ <SortJavaStaticImport>`
4876   When sorting Java imports, by default static imports are placed before
4877   non-static imports. If ``JavaStaticImportAfterImport`` is ``After``,
4878   static imports are placed after non-static imports.
4880   Possible values:
4882   * ``SJSIO_Before`` (in configuration: ``Before``)
4883     Static imports are placed before non-static imports.
4885     .. code-block:: java
4887       import static org.example.function1;
4889       import org.example.ClassA;
4891   * ``SJSIO_After`` (in configuration: ``After``)
4892     Static imports are placed after non-static imports.
4894     .. code-block:: java
4896       import org.example.ClassA;
4898       import static org.example.function1;
4902 .. _SortUsingDeclarations:
4904 **SortUsingDeclarations** (``SortUsingDeclarationsOptions``) :versionbadge:`clang-format 5` :ref:`¶ <SortUsingDeclarations>`
4905   Controls if and how clang-format will sort using declarations.
4907   Possible values:
4909   * ``SUD_Never`` (in configuration: ``Never``)
4910     Using declarations are never sorted.
4912     .. code-block:: c++
4914        using std::chrono::duration_cast;
4915        using std::move;
4916        using boost::regex;
4917        using boost::regex_constants::icase;
4918        using std::string;
4920   * ``SUD_Lexicographic`` (in configuration: ``Lexicographic``)
4921     Using declarations are sorted in the order defined as follows:
4922     Split the strings by "::" and discard any initial empty strings. Sort
4923     the lists of names lexicographically, and within those groups, names are
4924     in case-insensitive lexicographic order.
4926     .. code-block:: c++
4928        using boost::regex;
4929        using boost::regex_constants::icase;
4930        using std::chrono::duration_cast;
4931        using std::move;
4932        using std::string;
4934   * ``SUD_LexicographicNumeric`` (in configuration: ``LexicographicNumeric``)
4935     Using declarations are sorted in the order defined as follows:
4936     Split the strings by "::" and discard any initial empty strings. The
4937     last element of each list is a non-namespace name; all others are
4938     namespace names. Sort the lists of names lexicographically, where the
4939     sort order of individual names is that all non-namespace names come
4940     before all namespace names, and within those groups, names are in
4941     case-insensitive lexicographic order.
4943     .. code-block:: c++
4945        using boost::regex;
4946        using boost::regex_constants::icase;
4947        using std::move;
4948        using std::string;
4949        using std::chrono::duration_cast;
4953 .. _SpaceAfterCStyleCast:
4955 **SpaceAfterCStyleCast** (``Boolean``) :versionbadge:`clang-format 3.5` :ref:`¶ <SpaceAfterCStyleCast>`
4956   If ``true``, a space is inserted after C style casts.
4958   .. code-block:: c++
4960      true:                                  false:
4961      (int) i;                       vs.     (int)i;
4963 .. _SpaceAfterLogicalNot:
4965 **SpaceAfterLogicalNot** (``Boolean``) :versionbadge:`clang-format 9` :ref:`¶ <SpaceAfterLogicalNot>`
4966   If ``true``, a space is inserted after the logical not operator (``!``).
4968   .. code-block:: c++
4970      true:                                  false:
4971      ! someExpression();            vs.     !someExpression();
4973 .. _SpaceAfterTemplateKeyword:
4975 **SpaceAfterTemplateKeyword** (``Boolean``) :versionbadge:`clang-format 4` :ref:`¶ <SpaceAfterTemplateKeyword>`
4976   If ``true``, a space will be inserted after the 'template' keyword.
4978   .. code-block:: c++
4980      true:                                  false:
4981      template <int> void foo();     vs.     template<int> void foo();
4983 .. _SpaceAroundPointerQualifiers:
4985 **SpaceAroundPointerQualifiers** (``SpaceAroundPointerQualifiersStyle``) :versionbadge:`clang-format 12` :ref:`¶ <SpaceAroundPointerQualifiers>`
4986   Defines in which cases to put a space before or after pointer qualifiers
4988   Possible values:
4990   * ``SAPQ_Default`` (in configuration: ``Default``)
4991     Don't ensure spaces around pointer qualifiers and use PointerAlignment
4992     instead.
4994     .. code-block:: c++
4996        PointerAlignment: Left                 PointerAlignment: Right
4997        void* const* x = NULL;         vs.     void *const *x = NULL;
4999   * ``SAPQ_Before`` (in configuration: ``Before``)
5000     Ensure that there is a space before pointer qualifiers.
5002     .. code-block:: c++
5004        PointerAlignment: Left                 PointerAlignment: Right
5005        void* const* x = NULL;         vs.     void * const *x = NULL;
5007   * ``SAPQ_After`` (in configuration: ``After``)
5008     Ensure that there is a space after pointer qualifiers.
5010     .. code-block:: c++
5012        PointerAlignment: Left                 PointerAlignment: Right
5013        void* const * x = NULL;         vs.     void *const *x = NULL;
5015   * ``SAPQ_Both`` (in configuration: ``Both``)
5016     Ensure that there is a space both before and after pointer qualifiers.
5018     .. code-block:: c++
5020        PointerAlignment: Left                 PointerAlignment: Right
5021        void* const * x = NULL;         vs.     void * const *x = NULL;
5025 .. _SpaceBeforeAssignmentOperators:
5027 **SpaceBeforeAssignmentOperators** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpaceBeforeAssignmentOperators>`
5028   If ``false``, spaces will be removed before assignment operators.
5030   .. code-block:: c++
5032      true:                                  false:
5033      int a = 5;                     vs.     int a= 5;
5034      a += 42;                               a+= 42;
5036 .. _SpaceBeforeCaseColon:
5038 **SpaceBeforeCaseColon** (``Boolean``) :versionbadge:`clang-format 12` :ref:`¶ <SpaceBeforeCaseColon>`
5039   If ``false``, spaces will be removed before case colon.
5041   .. code-block:: c++
5043     true:                                   false
5044     switch (x) {                    vs.     switch (x) {
5045       case 1 : break;                         case 1: break;
5046     }                                       }
5048 .. _SpaceBeforeCpp11BracedList:
5050 **SpaceBeforeCpp11BracedList** (``Boolean``) :versionbadge:`clang-format 7` :ref:`¶ <SpaceBeforeCpp11BracedList>`
5051   If ``true``, a space will be inserted before a C++11 braced list
5052   used to initialize an object (after the preceding identifier or type).
5054   .. code-block:: c++
5056      true:                                  false:
5057      Foo foo { bar };               vs.     Foo foo{ bar };
5058      Foo {};                                Foo{};
5059      vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
5060      new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
5062 .. _SpaceBeforeCtorInitializerColon:
5064 **SpaceBeforeCtorInitializerColon** (``Boolean``) :versionbadge:`clang-format 7` :ref:`¶ <SpaceBeforeCtorInitializerColon>`
5065   If ``false``, spaces will be removed before constructor initializer
5066   colon.
5068   .. code-block:: c++
5070      true:                                  false:
5071      Foo::Foo() : a(a) {}                   Foo::Foo(): a(a) {}
5073 .. _SpaceBeforeInheritanceColon:
5075 **SpaceBeforeInheritanceColon** (``Boolean``) :versionbadge:`clang-format 7` :ref:`¶ <SpaceBeforeInheritanceColon>`
5076   If ``false``, spaces will be removed before inheritance colon.
5078   .. code-block:: c++
5080      true:                                  false:
5081      class Foo : Bar {}             vs.     class Foo: Bar {}
5083 .. _SpaceBeforeJsonColon:
5085 **SpaceBeforeJsonColon** (``Boolean``) :versionbadge:`clang-format 17` :ref:`¶ <SpaceBeforeJsonColon>`
5086   If ``true``, a space will be added before a JSON colon. For other
5087   languages, e.g. JavaScript, use ``SpacesInContainerLiterals`` instead.
5089   .. code-block:: c++
5091      true:                                  false:
5092      {                                      {
5093        "key" : "value"              vs.       "key": "value"
5094      }                                      }
5096 .. _SpaceBeforeParens:
5098 **SpaceBeforeParens** (``SpaceBeforeParensStyle``) :versionbadge:`clang-format 3.5` :ref:`¶ <SpaceBeforeParens>`
5099   Defines in which cases to put a space before opening parentheses.
5101   Possible values:
5103   * ``SBPO_Never`` (in configuration: ``Never``)
5104     Never put a space before opening parentheses.
5106     .. code-block:: c++
5108        void f() {
5109          if(true) {
5110            f();
5111          }
5112        }
5114   * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``)
5115     Put a space before opening parentheses only after control statement
5116     keywords (``for/if/while...``).
5118     .. code-block:: c++
5120        void f() {
5121          if (true) {
5122            f();
5123          }
5124        }
5126   * ``SBPO_ControlStatementsExceptControlMacros`` (in configuration: ``ControlStatementsExceptControlMacros``)
5127     Same as ``SBPO_ControlStatements`` except this option doesn't apply to
5128     ForEach and If macros. This is useful in projects where ForEach/If
5129     macros are treated as function calls instead of control statements.
5130     ``SBPO_ControlStatementsExceptForEachMacros`` remains an alias for
5131     backward compatibility.
5133     .. code-block:: c++
5135        void f() {
5136          Q_FOREACH(...) {
5137            f();
5138          }
5139        }
5141   * ``SBPO_NonEmptyParentheses`` (in configuration: ``NonEmptyParentheses``)
5142     Put a space before opening parentheses only if the parentheses are not
5143     empty i.e. '()'
5145     .. code-block:: c++
5147       void() {
5148         if (true) {
5149           f();
5150           g (x, y, z);
5151         }
5152       }
5154   * ``SBPO_Always`` (in configuration: ``Always``)
5155     Always put a space before opening parentheses, except when it's
5156     prohibited by the syntax rules (in function-like macro definitions) or
5157     when determined by other style rules (after unary operators, opening
5158     parentheses, etc.)
5160     .. code-block:: c++
5162        void f () {
5163          if (true) {
5164            f ();
5165          }
5166        }
5168   * ``SBPO_Custom`` (in configuration: ``Custom``)
5169     Configure each individual space before parentheses in
5170     ``SpaceBeforeParensOptions``.
5174 .. _SpaceBeforeParensOptions:
5176 **SpaceBeforeParensOptions** (``SpaceBeforeParensCustom``) :versionbadge:`clang-format 14` :ref:`¶ <SpaceBeforeParensOptions>`
5177   Control of individual space before parentheses.
5179   If ``SpaceBeforeParens`` is set to ``Custom``, use this to specify
5180   how each individual space before parentheses case should be handled.
5181   Otherwise, this is ignored.
5183   .. code-block:: yaml
5185     # Example of usage:
5186     SpaceBeforeParens: Custom
5187     SpaceBeforeParensOptions:
5188       AfterControlStatements: true
5189       AfterFunctionDefinitionName: true
5191   Nested configuration flags:
5193   Precise control over the spacing before parentheses.
5195   .. code-block:: c++
5197     # Should be declared this way:
5198     SpaceBeforeParens: Custom
5199     SpaceBeforeParensOptions:
5200       AfterControlStatements: true
5201       AfterFunctionDefinitionName: true
5203   * ``bool AfterControlStatements`` If ``true``, put space between control statement keywords
5204     (for/if/while...) and opening parentheses.
5206     .. code-block:: c++
5208        true:                                  false:
5209        if (...) {}                     vs.    if(...) {}
5211   * ``bool AfterForeachMacros`` If ``true``, put space between foreach macros and opening parentheses.
5213     .. code-block:: c++
5215        true:                                  false:
5216        FOREACH (...)                   vs.    FOREACH(...)
5217          <loop-body>                            <loop-body>
5219   * ``bool AfterFunctionDeclarationName`` If ``true``, put a space between function declaration name and opening
5220     parentheses.
5222     .. code-block:: c++
5224        true:                                  false:
5225        void f ();                      vs.    void f();
5227   * ``bool AfterFunctionDefinitionName`` If ``true``, put a space between function definition name and opening
5228     parentheses.
5230     .. code-block:: c++
5232        true:                                  false:
5233        void f () {}                    vs.    void f() {}
5235   * ``bool AfterIfMacros`` If ``true``, put space between if macros and opening parentheses.
5237     .. code-block:: c++
5239        true:                                  false:
5240        IF (...)                        vs.    IF(...)
5241          <conditional-body>                     <conditional-body>
5243   * ``bool AfterOverloadedOperator`` If ``true``, put a space between operator overloading and opening
5244     parentheses.
5246     .. code-block:: c++
5248        true:                                  false:
5249        void operator++ (int a);        vs.    void operator++(int a);
5250        object.operator++ (10);                object.operator++(10);
5252   * ``AfterPlacementOperatorStyle AfterPlacementOperator`` :versionbadge:`clang-format 18`
5254     Defines in which cases to put a space between ``new/delete`` operators
5255     and opening parentheses.
5257     Possible values:
5259     * ``APO_Never`` (in configuration: ``Never``)
5260       Remove space after ``new/delete`` operators and before ``(``.
5262       .. code-block:: c++
5264          new(buf) T;
5265          delete(buf) T;
5267     * ``APO_Always`` (in configuration: ``Always``)
5268       Always add space after ``new/delete`` operators and before ``(``.
5270       .. code-block:: c++
5272          new (buf) T;
5273          delete (buf) T;
5275     * ``APO_Leave`` (in configuration: ``Leave``)
5276       Leave placement ``new/delete`` expressions as they are.
5279   * ``bool AfterRequiresInClause`` If ``true``, put space between requires keyword in a requires clause and
5280     opening parentheses, if there is one.
5282     .. code-block:: c++
5284        true:                                  false:
5285        template<typename T>            vs.    template<typename T>
5286        requires (A<T> && B<T>)                requires(A<T> && B<T>)
5287        ...                                    ...
5289   * ``bool AfterRequiresInExpression`` If ``true``, put space between requires keyword in a requires expression
5290     and opening parentheses.
5292     .. code-block:: c++
5294        true:                                  false:
5295        template<typename T>            vs.    template<typename T>
5296        concept C = requires (T t) {           concept C = requires(T t) {
5297                      ...                                    ...
5298                    }                                      }
5300   * ``bool BeforeNonEmptyParentheses`` If ``true``, put a space before opening parentheses only if the
5301     parentheses are not empty.
5303     .. code-block:: c++
5305        true:                                  false:
5306        void f (int a);                 vs.    void f();
5307        f (a);                                 f();
5310 .. _SpaceBeforeRangeBasedForLoopColon:
5312 **SpaceBeforeRangeBasedForLoopColon** (``Boolean``) :versionbadge:`clang-format 7` :ref:`¶ <SpaceBeforeRangeBasedForLoopColon>`
5313   If ``false``, spaces will be removed before range-based for loop
5314   colon.
5316   .. code-block:: c++
5318      true:                                  false:
5319      for (auto v : values) {}       vs.     for(auto v: values) {}
5321 .. _SpaceBeforeSquareBrackets:
5323 **SpaceBeforeSquareBrackets** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <SpaceBeforeSquareBrackets>`
5324   If ``true``, spaces will be before  ``[``.
5325   Lambdas will not be affected. Only the first ``[`` will get a space added.
5327   .. code-block:: c++
5329      true:                                  false:
5330      int a [5];                    vs.      int a[5];
5331      int a [5][5];                 vs.      int a[5][5];
5333 .. _SpaceInEmptyBlock:
5335 **SpaceInEmptyBlock** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <SpaceInEmptyBlock>`
5336   If ``true``, spaces will be inserted into ``{}``.
5338   .. code-block:: c++
5340      true:                                false:
5341      void f() { }                   vs.   void f() {}
5342      while (true) { }                     while (true) {}
5344 .. _SpaceInEmptyParentheses:
5346 **SpaceInEmptyParentheses** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpaceInEmptyParentheses>`
5347   If ``true``, spaces may be inserted into ``()``.
5348   This option is **deprecated**. See ``InEmptyParentheses`` of
5349   ``SpacesInParensOptions``.
5351 .. _SpacesBeforeTrailingComments:
5353 **SpacesBeforeTrailingComments** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpacesBeforeTrailingComments>`
5354   The number of spaces before trailing line comments
5355   (``//`` - comments).
5357   This does not affect trailing block comments (``/*`` - comments) as those
5358   commonly have different usage patterns and a number of special cases.  In
5359   the case of Verilog, it doesn't affect a comment right after the opening
5360   parenthesis in the port or parameter list in a module header, because it
5361   is probably for the port on the following line instead of the parenthesis
5362   it follows.
5364   .. code-block:: c++
5366      SpacesBeforeTrailingComments: 3
5367      void f() {
5368        if (true) {   // foo1
5369          f();        // bar
5370        }             // foo
5371      }
5373 .. _SpacesInAngles:
5375 **SpacesInAngles** (``SpacesInAnglesStyle``) :versionbadge:`clang-format 3.4` :ref:`¶ <SpacesInAngles>`
5376   The SpacesInAnglesStyle to use for template argument lists.
5378   Possible values:
5380   * ``SIAS_Never`` (in configuration: ``Never``)
5381     Remove spaces after ``<`` and before ``>``.
5383     .. code-block:: c++
5385        static_cast<int>(arg);
5386        std::function<void(int)> fct;
5388   * ``SIAS_Always`` (in configuration: ``Always``)
5389     Add spaces after ``<`` and before ``>``.
5391     .. code-block:: c++
5393        static_cast< int >(arg);
5394        std::function< void(int) > fct;
5396   * ``SIAS_Leave`` (in configuration: ``Leave``)
5397     Keep a single space after ``<`` and before ``>`` if any spaces were
5398     present. Option ``Standard: Cpp03`` takes precedence.
5402 .. _SpacesInCStyleCastParentheses:
5404 **SpacesInCStyleCastParentheses** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpacesInCStyleCastParentheses>`
5405   If ``true``, spaces may be inserted into C style casts.
5406   This option is **deprecated**. See ``InCStyleCasts`` of
5407   ``SpacesInParensOptions``.
5409 .. _SpacesInConditionalStatement:
5411 **SpacesInConditionalStatement** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <SpacesInConditionalStatement>`
5412   If ``true``, spaces will be inserted around if/for/switch/while
5413   conditions.
5414   This option is **deprecated**. See ``InConditionalStatements`` of
5415   ``SpacesInParensOptions``.
5417 .. _SpacesInContainerLiterals:
5419 **SpacesInContainerLiterals** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpacesInContainerLiterals>`
5420   If ``true``, spaces are inserted inside container literals (e.g.  ObjC and
5421   Javascript array and dict literals). For JSON, use
5422   ``SpaceBeforeJsonColon`` instead.
5424   .. code-block:: js
5426      true:                                  false:
5427      var arr = [ 1, 2, 3 ];         vs.     var arr = [1, 2, 3];
5428      f({a : 1, b : 2, c : 3});              f({a: 1, b: 2, c: 3});
5430 .. _SpacesInLineCommentPrefix:
5432 **SpacesInLineCommentPrefix** (``SpacesInLineComment``) :versionbadge:`clang-format 13` :ref:`¶ <SpacesInLineCommentPrefix>`
5433   How many spaces are allowed at the start of a line comment. To disable the
5434   maximum set it to ``-1``, apart from that the maximum takes precedence
5435   over the minimum.
5437   .. code-block:: c++
5439     Minimum = 1
5440     Maximum = -1
5441     // One space is forced
5443     //  but more spaces are possible
5445     Minimum = 0
5446     Maximum = 0
5447     //Forces to start every comment directly after the slashes
5449   Note that in line comment sections the relative indent of the subsequent
5450   lines is kept, that means the following:
5452   .. code-block:: c++
5454     before:                                   after:
5455     Minimum: 1
5456     //if (b) {                                // if (b) {
5457     //  return true;                          //   return true;
5458     //}                                       // }
5460     Maximum: 0
5461     /// List:                                 ///List:
5462     ///  - Foo                                /// - Foo
5463     ///    - Bar                              ///   - Bar
5465   This option has only effect if ``ReflowComments`` is set to ``true``.
5467   Nested configuration flags:
5469   Control of spaces within a single line comment.
5471   * ``unsigned Minimum`` The minimum number of spaces at the start of the comment.
5473   * ``unsigned Maximum`` The maximum number of spaces at the start of the comment.
5476 .. _SpacesInParens:
5478 **SpacesInParens** (``SpacesInParensStyle``) :versionbadge:`clang-format 17` :ref:`¶ <SpacesInParens>`
5479   Defines in which cases spaces will be inserted after ``(`` and before
5480   ``)``.
5482   Possible values:
5484   * ``SIPO_Never`` (in configuration: ``Never``)
5485     Never put a space in parentheses.
5487     .. code-block:: c++
5489        void f() {
5490          if(true) {
5491            f();
5492          }
5493        }
5495   * ``SIPO_Custom`` (in configuration: ``Custom``)
5496     Configure each individual space in parentheses in
5497     `SpacesInParensOptions`.
5501 .. _SpacesInParensOptions:
5503 **SpacesInParensOptions** (``SpacesInParensCustom``) :versionbadge:`clang-format 17` :ref:`¶ <SpacesInParensOptions>`
5504   Control of individual spaces in parentheses.
5506   If ``SpacesInParens`` is set to ``Custom``, use this to specify
5507   how each individual space in parentheses case should be handled.
5508   Otherwise, this is ignored.
5510   .. code-block:: yaml
5512     # Example of usage:
5513     SpacesInParens: Custom
5514     SpacesInParensOptions:
5515       InConditionalStatements: true
5516       InEmptyParentheses: true
5518   Nested configuration flags:
5520   Precise control over the spacing in parentheses.
5522   .. code-block:: c++
5524     # Should be declared this way:
5525     SpacesInParens: Custom
5526     SpacesInParensOptions:
5527       InConditionalStatements: true
5528       Other: true
5530   * ``bool InConditionalStatements`` Put a space in parentheses only inside conditional statements
5531     (``for/if/while/switch...``).
5533     .. code-block:: c++
5535        true:                                  false:
5536        if ( a )  { ... }              vs.     if (a) { ... }
5537        while ( i < 5 )  { ... }               while (i < 5) { ... }
5539   * ``bool InCStyleCasts`` Put a space in C style casts.
5541     .. code-block:: c++
5543        true:                                  false:
5544        x = ( int32 )y                 vs.     x = (int32)y
5546   * ``bool InEmptyParentheses`` Put a space in parentheses only if the parentheses are empty i.e. '()'
5548     .. code-block:: c++
5550        true:                                false:
5551        void f( ) {                    vs.   void f() {
5552          int x[] = {foo( ), bar( )};          int x[] = {foo(), bar()};
5553          if (true) {                          if (true) {
5554            f( );                                f();
5555          }                                    }
5556        }                                    }
5558   * ``bool Other`` Put a space in parentheses not covered by preceding options.
5560     .. code-block:: c++
5562        true:                                  false:
5563        t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
5566 .. _SpacesInParentheses:
5568 **SpacesInParentheses** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpacesInParentheses>`
5569   If ``true``, spaces will be inserted after ``(`` and before ``)``.
5570   This option is **deprecated**. The previous behavior is preserved by using
5571   ``SpacesInParens`` with ``Custom`` and by setting all
5572   ``SpacesInParensOptions`` to ``true`` except for ``InCStyleCasts`` and
5573   ``InEmptyParentheses``.
5575 .. _SpacesInSquareBrackets:
5577 **SpacesInSquareBrackets** (``Boolean``) :versionbadge:`clang-format 3.7` :ref:`¶ <SpacesInSquareBrackets>`
5578   If ``true``, spaces will be inserted after ``[`` and before ``]``.
5579   Lambdas without arguments or unspecified size array declarations will not
5580   be affected.
5582   .. code-block:: c++
5584      true:                                  false:
5585      int a[ 5 ];                    vs.     int a[5];
5586      std::unique_ptr<int[]> foo() {} // Won't be affected
5588 .. _Standard:
5590 **Standard** (``LanguageStandard``) :versionbadge:`clang-format 3.7` :ref:`¶ <Standard>`
5591   Parse and format C++ constructs compatible with this standard.
5593   .. code-block:: c++
5595      c++03:                                 latest:
5596      vector<set<int> > x;           vs.     vector<set<int>> x;
5598   Possible values:
5600   * ``LS_Cpp03`` (in configuration: ``c++03``)
5601     Parse and format as C++03.
5602     ``Cpp03`` is a deprecated alias for ``c++03``
5604   * ``LS_Cpp11`` (in configuration: ``c++11``)
5605     Parse and format as C++11.
5607   * ``LS_Cpp14`` (in configuration: ``c++14``)
5608     Parse and format as C++14.
5610   * ``LS_Cpp17`` (in configuration: ``c++17``)
5611     Parse and format as C++17.
5613   * ``LS_Cpp20`` (in configuration: ``c++20``)
5614     Parse and format as C++20.
5616   * ``LS_Latest`` (in configuration: ``Latest``)
5617     Parse and format using the latest supported language version.
5618     ``Cpp11`` is a deprecated alias for ``Latest``
5620   * ``LS_Auto`` (in configuration: ``Auto``)
5621     Automatic detection based on the input.
5625 .. _StatementAttributeLikeMacros:
5627 **StatementAttributeLikeMacros** (``List of Strings``) :versionbadge:`clang-format 12` :ref:`¶ <StatementAttributeLikeMacros>`
5628   Macros which are ignored in front of a statement, as if they were an
5629   attribute. So that they are not parsed as identifier, for example for Qts
5630   emit.
5632   .. code-block:: c++
5634     AlignConsecutiveDeclarations: true
5635     StatementAttributeLikeMacros: []
5636     unsigned char data = 'x';
5637     emit          signal(data); // This is parsed as variable declaration.
5639     AlignConsecutiveDeclarations: true
5640     StatementAttributeLikeMacros: [emit]
5641     unsigned char data = 'x';
5642     emit signal(data); // Now it's fine again.
5644 .. _StatementMacros:
5646 **StatementMacros** (``List of Strings``) :versionbadge:`clang-format 8` :ref:`¶ <StatementMacros>`
5647   A vector of macros that should be interpreted as complete
5648   statements.
5650   Typical macros are expressions, and require a semi-colon to be
5651   added; sometimes this is not the case, and this allows to make
5652   clang-format aware of such cases.
5654   For example: Q_UNUSED
5656 .. _TabWidth:
5658 **TabWidth** (``Unsigned``) :versionbadge:`clang-format 3.7` :ref:`¶ <TabWidth>`
5659   The number of columns used for tab stops.
5661 .. _TypeNames:
5663 **TypeNames** (``List of Strings``) :versionbadge:`clang-format 17` :ref:`¶ <TypeNames>`
5664   A vector of non-keyword identifiers that should be interpreted as type
5665   names.
5667   A ``*``, ``&``, or ``&&`` between a type name and another non-keyword
5668   identifier is annotated as a pointer or reference token instead of a
5669   binary operator.
5671 .. _TypenameMacros:
5673 **TypenameMacros** (``List of Strings``) :versionbadge:`clang-format 9` :ref:`¶ <TypenameMacros>`
5674   A vector of macros that should be interpreted as type declarations
5675   instead of as function calls.
5677   These are expected to be macros of the form:
5679   .. code-block:: c++
5681     STACK_OF(...)
5683   In the .clang-format configuration file, this can be configured like:
5685   .. code-block:: yaml
5687     TypenameMacros: ['STACK_OF', 'LIST']
5689   For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
5691 .. _UseCRLF:
5693 **UseCRLF** (``Boolean``) :versionbadge:`clang-format 10` :ref:`¶ <UseCRLF>`
5694   This option is **deprecated**. See ``LF`` and ``CRLF`` of ``LineEnding``.
5696 .. _UseTab:
5698 **UseTab** (``UseTabStyle``) :versionbadge:`clang-format 3.7` :ref:`¶ <UseTab>`
5699   The way to use tab characters in the resulting file.
5701   Possible values:
5703   * ``UT_Never`` (in configuration: ``Never``)
5704     Never use tab.
5706   * ``UT_ForIndentation`` (in configuration: ``ForIndentation``)
5707     Use tabs only for indentation.
5709   * ``UT_ForContinuationAndIndentation`` (in configuration: ``ForContinuationAndIndentation``)
5710     Fill all leading whitespace with tabs, and use spaces for alignment that
5711     appears within a line (e.g. consecutive assignments and declarations).
5713   * ``UT_AlignWithSpaces`` (in configuration: ``AlignWithSpaces``)
5714     Use tabs for line continuation and indentation, and spaces for
5715     alignment.
5717   * ``UT_Always`` (in configuration: ``Always``)
5718     Use tabs whenever we need to fill whitespace that spans at least from
5719     one tab stop to the next one.
5723 .. _VerilogBreakBetweenInstancePorts:
5725 **VerilogBreakBetweenInstancePorts** (``Boolean``) :versionbadge:`clang-format 17` :ref:`¶ <VerilogBreakBetweenInstancePorts>`
5726   For Verilog, put each port on its own line in module instantiations.
5728   .. code-block:: c++
5730      true:
5731      ffnand ff1(.q(),
5732                 .qbar(out1),
5733                 .clear(in1),
5734                 .preset(in2));
5736      false:
5737      ffnand ff1(.q(), .qbar(out1), .clear(in1), .preset(in2));
5739 .. _WhitespaceSensitiveMacros:
5741 **WhitespaceSensitiveMacros** (``List of Strings``) :versionbadge:`clang-format 11` :ref:`¶ <WhitespaceSensitiveMacros>`
5742   A vector of macros which are whitespace-sensitive and should not
5743   be touched.
5745   These are expected to be macros of the form:
5747   .. code-block:: c++
5749     STRINGIZE(...)
5751   In the .clang-format configuration file, this can be configured like:
5753   .. code-block:: yaml
5755     WhitespaceSensitiveMacros: ['STRINGIZE', 'PP_STRINGIZE']
5757   For example: BOOST_PP_STRINGIZE
5759 .. END_FORMAT_STYLE_OPTIONS
5761 Adding additional style options
5762 ===============================
5764 Each additional style option adds costs to the clang-format project. Some of
5765 these costs affect the clang-format development itself, as we need to make
5766 sure that any given combination of options work and that new features don't
5767 break any of the existing options in any way. There are also costs for end users
5768 as options become less discoverable and people have to think about and make a
5769 decision on options they don't really care about.
5771 The goal of the clang-format project is more on the side of supporting a
5772 limited set of styles really well as opposed to supporting every single style
5773 used by a codebase somewhere in the wild. Of course, we do want to support all
5774 major projects and thus have established the following bar for adding style
5775 options. Each new style option must ..
5777   * be used in a project of significant size (have dozens of contributors)
5778   * have a publicly accessible style guide
5779   * have a person willing to contribute and maintain patches
5781 Examples
5782 ========
5784 A style similar to the `Linux Kernel style
5785 <https://www.kernel.org/doc/html/latest/process/coding-style.html>`_:
5787 .. code-block:: yaml
5789   BasedOnStyle: LLVM
5790   IndentWidth: 8
5791   UseTab: Always
5792   BreakBeforeBraces: Linux
5793   AllowShortIfStatementsOnASingleLine: false
5794   IndentCaseLabels: false
5796 The result is (imagine that tabs are used for indentation here):
5798 .. code-block:: c++
5800   void test()
5801   {
5802           switch (x) {
5803           case 0:
5804           case 1:
5805                   do_something();
5806                   break;
5807           case 2:
5808                   do_something_else();
5809                   break;
5810           default:
5811                   break;
5812           }
5813           if (condition)
5814                   do_something_completely_different();
5816           if (x == y) {
5817                   q();
5818           } else if (x > y) {
5819                   w();
5820           } else {
5821                   r();
5822           }
5823   }
5825 A style similar to the default Visual Studio formatting style:
5827 .. code-block:: yaml
5829   UseTab: Never
5830   IndentWidth: 4
5831   BreakBeforeBraces: Allman
5832   AllowShortIfStatementsOnASingleLine: false
5833   IndentCaseLabels: false
5834   ColumnLimit: 0
5836 The result is:
5838 .. code-block:: c++
5840   void test()
5841   {
5842       switch (suffix)
5843       {
5844       case 0:
5845       case 1:
5846           do_something();
5847           break;
5848       case 2:
5849           do_something_else();
5850           break;
5851       default:
5852           break;
5853       }
5854       if (condition)
5855           do_something_completely_different();
5857       if (x == y)
5858       {
5859           q();
5860       }
5861       else if (x > y)
5862       {
5863           w();
5864       }
5865       else
5866       {
5867           r();
5868       }
5869   }